J'ai un dictionnaire de ressources que j'utilise pour définir le look-and-feel (style) de mon application.Définition d'un style Elements.Resource à l'aide de BasedOn dans un dictionnaire de ressources
Je viens de créer un autre dictionnaire de ressources contenant des DataTemplates que j'utilise sur plusieurs écrans différents (et même plusieurs fois dans le même écran) pour afficher mes objets métier.
Je voudrais changer certains des styles par défaut dans mes DataTemplates afin que les contrôles s'ajustent mieux; Cependant, j'aimerais que les commandes héritent du même style que le reste de l'écran. Donc, naturellement, je veux utiliser la propriété BasedOn pour cette tâche. Le problème que j'ai est que je ne suis pas sûr de quoi définir la propriété BasedOn à.
Par exemple, dans le dictionnaire de ressources qui contient mes styles (appelé "myStyle.xaml") J'ai:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:primatives="clr-namespace:System.Windows.Controls.Primitives;assembly=PresentationFramework"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="{x:Type Label}">
<Setter Property="Foreground" Value="#F5F5F5" />
<Setter Property="FontSize" Value="12"></Setter>
<Setter Property="Width" Value="120"></Setter>
<Setter Property="FontFamily" Value="Arial"></Setter>
</Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="FontSize" Value="12"></Setter>
<Setter Property="Width" Value="120"></Setter>
<Setter Property="Height" Value="25"></Setter>
<Setter Property="Background" Value="Black"></Setter>
</Style>
<!-- .... and so on .... -->
</ResourceDictionary>
J'utilise cette ressource dans la fenêtre suivante:
<Window x:Class="SiteSetupWindow4"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:primatives="clr-namespace:System.Windows.Controls.Primitives;assembly=PresentationFramework"
Title="A Screen">
<Window.Resources>
<ResourceDictionary x:Key="defaultStyleX">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary x:Name="DefaultStyles" Source="Resources/myStyle.xaml" />
<ResourceDictionary x:Name="Templates" Source="Resources/myTemplates.xaml"></ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
Maintenant, j'ai un autre dictionnaire de ressources qui contient DataTemplates que j'utilise dans ma fenêtre. Il s'appelle "myTemplates". Le style est appliqué au DataTemplate comme prévu; cependant, je voudrais remplacer certains aspects du style dans le DataTemplate (Like width par exemple).
C'est ce que j'ai fatigué, mais je ne peux pas obtenir la propriété BasedOn travailler ...
(myTemplate.xaml)
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<DataTemplate x:Key="PanelInfo">
<StackPanel>
<StackPanel.Resources>
<Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Width" Value="120" />
</Style>
<Style TargetType="Label">
<Setter Property="Width" Value="180" />
</Style>
<Style TargetType="ComboBox">
<Setter Property="Width" Value="120" />
</Style>
<StackPanel.Resources>
<StackPanel Orientation="Horizontal">
<Label Content="Type:"></Label>
<ComboBox>
<ComboBoxItem Content="{Binding Path=Type}" IsSelected="True"></ComboBoxItem>
</ComboBox>
<!--...and so on -->
</StackPanel>
</StackPanel>
</ResourceDictionary>
Cela échoue .... J'ai aussi essayé d'utiliser DynamicResource, mais cela échoue également. Je ne sais pas comment contourner cela.
Un conseil serait grandement apprécié!
Merci,
-Frinny
Avez-vous trouvé la solution? –