2010-09-23 7 views
5

je définir regard fait sur commande pour le contrôle de bouton dans le dictionnaire des ressources:WPF - style Mixing défini dans le dictionnaire avec un style défini dans le contrôle parent

<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 ont été 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 lors 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ésoudre ce problème?

+0

pouvez-vous partager le xaml? –

Répondre

6

Celui ci-dessous fonctionne. J'ai juste déplacé le Style des MergedDictionaries et l'ai placé 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 d'origine, je ne sais pas pourquoi le concepteur a pu le rendre correctement pendant l'exécution WPF n'a pas. Le MSDN documentation indique cependant que:

Un ResourceDictionary fusionné ne contient pas d'éléments de ressource définis dans le balisage. Au lieu de cela, le dictionnaire fusionné est un ResourceDictionary sans éléments fils de balisage définis (ou sans éléments ajoutés via le code), mais avec un URI spécifié pour Source.

Cela pourrait avoir quelque chose à voir avec cela.

Questions connexes