Bonjour,
Actuellement en cours de développement d'un Framework de CustomControls pour WPF, je suis tombé sur un problème que je n'arrive pas à résoudre.
J'ai une application bibliothèque de classe avec à l'intérieur une Class CustomListView.cs qui est un simple héritage de ListView pour le moment :
Dans cette bibliothèque de classe, j'ai un fichier generic.xaml dans le dossier Themes contenant mon style par défaut pour mon contrôle CustomListView :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public class CustomListView : ListView { static CustomListView() { DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomListView), new FrameworkPropertyMetadata(typeof(CustomListView))); } }
Ce fichier generic.xaml à les propriétés suivantes: Build Action = Page, et Custom Tool = MSBuild:Compile
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <Style TargetType="{x:Type local:CustomListView}"> <Setter Property="Background" Value="Red" /> </Style>
Dans le fichier Assembly.cs, il y a :
A coté, j'ai un projet WPF qui référence cette dll, ave une simple page qui affiche ma CustomListView.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 [assembly:ThemeInfo( ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly )]
Jusqu'ici, tout va bien, ma listView à un fond rouge.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <Window x:Class="TestCustomListView.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:cctrls="clr-namespace:WpfCustomControlLibrary1;assembly=WpfCustomControlLibrary1" Title="MainWindow" Height="350" Width="525"> <Grid> <cctrls:CustomListView /> </Grid> </Window>
Mon problème arrive lorsque je défini la "View" de ma CustomListView, la style n'est plus pris en compte.
Y a t'il quelque chose à faire de particulier pour gérer les GridView dans mon style ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <cctrls:CustomListView> <cctrls:CustomListView.View> <GridView> <GridViewColumn /> </GridView> </cctrls:CustomListView.View> </cctrls:CustomListView>
De plus, encore plus étonnant pour moi, si je référence le fichier generic.xaml dans l'App.Xaml de mon application WPF, alors le style est bien utilisé :
Mais je ne souhaite pas que l'application cliente référence le fichier generic.xaml de ma dll.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9<Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/WpfCustomControlLibrary1;component/Themes/Generic.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources>
Avez vous une idée pour résoudre mon problème ?
Merci d'avance,
Partager