/ / WPF - Style de mélange défini dans le dictionnaire et style défini dans le contrôle parent - c #, .net, wpf, xaml

WPF - Style de mélange défini dans le dictionnaire avec le style défini dans le contrôle parent - c #, .net, wpf, xaml

Je définis l'aspect personnalisé du contrôle Button dans le dictionnaire de ressources:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="Button" x:Key="BaseButtonStyle">
<Setter Property="Background" Value="Blue"/>
</Style>
</ResourceDictionary>

Ensuite, j'essaie de changer le style dans la fenêtre où les boutons sont situés.

<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary.xaml"/>
<ResourceDictionary>
<Style TargetType="Button" BasedOn="{StaticResource BaseButtonStyle}">
<Setter Property="Foreground" Value="Red"/>
</Style>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>

Dans WPF Designer, j'ai ce que j'attendais. Bouton bleu avec le texte rouge. Mais au moment de l'exécution, les deux styles ne sont pas appliqués et le bouton a des couleurs par défaut. Comment puis-je réparer cela?

Réponses:

6 pour la réponse № 1

Celui ci-dessous fonctionne. Je viens de déplacer le style hors des MergedDictionaries et de le placer sur le ResourceDictionary externe.

<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>

<Style TargetType="Button" BasedOn="{StaticResource BaseButtonStyle}">
<Setter Property="Foreground" Value="Red"/>
</Style>
</ResourceDictionary>
</Window.Resources>

Dans votre XAML original, je ne suis pas sûr de savoir pourquoi le concepteur a été en mesure de le restituer correctement alors que le moteur d’exécution WPF ne l’a pas été. le Documentation MSDN dit cependant que:

Un ResourceDictionary fusionné n'a paséléments de ressources définis dans ce balisage. Au lieu de cela, le dictionnaire fusionné est un ResourceDictionary sans élément enfant de balisage défini (ou sans élément ajouté par le code), mais avec un URI spécifié pour Source.

Cela pourrait avoir quelque chose à voir avec cela.