Comment à la base un style sur un autre style dans un dictionnaire de ressources?
J'ai un thème qui est appliqué à tous les boutons dans un dictionnaire de ressources. Maintenant, je veux ajouter un déclencheur, le bouton tout en héritant des changements de style à partir du dictionnaire. J'ai essayé le code suivant, mais il est dit que le contrôle ne peut pas être trouvé. Comment puis-je résoudre ce problème ?
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Theme.xaml"/>
</ResourceDictionary.MergedDictionaries>
<conv:ErrorContentConverter x:Key="ErrorContentConverter" />
<Style x:Key="ValidTrigger"
TargetType="Control" BasedOn="{StaticResource {x:Type Control}}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsValid}" Value="False">
<Setter Property="IsEnabled" Value="false" />
</DataTrigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
</UserControl.Resources>
Le modèle de base:
<Style TargetType="{x:Type Button}" BasedOn="{x:Null}">
<Setter Property="FocusVisualStyle"
Value="{DynamicResource NuclearButtonFocusVisual}" />
<Setter Property="Foreground" Value="#FF042271" />
<Setter Property="FontFamily" Value="Trebuchet MS" />
<Setter Property="FontSize" Value="12" />
<Setter Property="Padding" Value="3" />
<Setter Property="Template" Value="{DynamicResource ButtonTemplate}" />
</Style>
OriginalL'auteur Marcom | 2011-04-15
Vous devez vous connecter pour publier un commentaire.
Donner à votre Style de base d'un nom, dire FooStyle.
Dans l'exemple que vous avez donné, modifier le TargetType et Basée à regarder comme suit:
Voulez-vous dire que, plutôt que d'attribuer une touche pour le style de base, vous souhaitez que le style étendu pour déterminer quel style de prolonger sur la base de sa TargetType? Je ne sais pas.
Pourquoi avez-vous hésité à donner de la base de style x:Key="FooStyle" ?
Si vous affectez une touche de style, le style n'est plus utilisé par défaut par tous les contrôles dans le contexte. Nathan Ami réponse fournit une solution pour cela. J'ai juste eu le même problème 🙂
OriginalL'auteur Pieter Müller
Un truc que j'ai utilisé dans le passé: dans votre
ResourceDictionary
qui définit couverture des styles pour votre application, ajoutez unex:Key
le style que vous souhaitez hériter de la, de la sorte:Pour appliquer ce style à tous les contrôles du type spécifié (
Button
dans cet exemple) sans avoir à définir explicitement leStyle
attribut de chaqueButton
, ajouter un autre style qui estBasedOn
ce style, mais n'ont pas de clé:À l'aide de cette méthode, tous les
Button
s dans votre demande sera automatiquement hériter de votre style personnalisé, mais vous pouvez toujours créer d'autres stylesBasedOn
laButtonStyle
entrée et éviter de souffler loin de votre style personnalisé.OriginalL'auteur Nathan Friend
Je pense qu'il n'est pas le style de base défini pour le "contrôle" de sorte que votre
BasedOn="{StaticResource {x:Type Control}}"
partie de ne pas trouver quoi que ce soit.Vous voudrez probablement changer
à
OriginalL'auteur Mike Schenk
StaticResource vs DynamicResource
Vous souhaitez utiliser DynamicResource au lieu de StaticResource. Votre demande de compiler et de la ressource sera résolu à l'exécution au lieu de compile-time. Il a utilisé pour être que DynamicResource aurait plus de performances dans l'ancien WPF jours, mais il semble être un non-problème aujourd'hui. Je veux dire, diable, Expression Blend est écrit dans WPF et utilise DynamicResources partout.
P. S. Gardez à l'esprit que si vous n'avez pas réellement définir un nom de ressource, votre application continue à fonctionner, mais dans votre cas, vous seriez en manque des fonctionnalités. 🙂
OriginalL'auteur m-y