Des Contrôles WPF comme StaticResource dans le Dictionnaire de Ressources, utilisées dans de multiples WPF Windows?
J'ai un Bouton de contrôle en tant que ressource dans le Dictionnaire de Ressources comme ci-dessous:
<!--ButtonResources.xaml file-->
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Button x:Key="buttonResource" Content={Binding BoundText}/>
</ResourceDictionary>
<!--ButtonResources.xaml file-->
Je vais maintenant utiliser ce bouton au-dessus de contrôle lié à la propriété de Contenu de ContentControl contrôles dans 2 Fenêtres différentes .les fichiers xaml où chaque Window
a son propre DataContext
et donc chaque fenêtre doit s'afficher le Content
de ci-dessus le bouton de contrôle sur la base de ses ViewModel's
BoundText
la valeur de la propriété ci-dessous pour chaque Fenêtre.
<Window x:Class="TestClass1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ButtonResources.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<ContentControl Content={StaticResource buttonResource}/>
</Grid>
</Window>
Mais, le problème est que la Fenêtre d'affichage de la même valeur pour la propriété BoundText ce qui signifie que les deux WPF Windows ont même instance de contrôle bouton de ressource utilisée dans les deux Windows.
Comment puis-je résoudre ce problème de telle sorte que chaque Fenêtre obtient un séparé bouton de contrôle de la ressource et d'afficher toujours différents valeurs pour les BoundText
propriété de leurs propre ViewModel?
Edit:
Pour les raisons indiquées dans MSDN
comme ci-dessous, je ne peux pas utiliser x:="False" attribut pour résoudre ce problème:
•ResourceDictionary qui contient les éléments ne doivent pas être imbriquées à l'
dans un autre ResourceDictionary. Par exemple, vous ne pouvez pas utiliser
x:Partagé pour les éléments dans un ResourceDictionary qui est dans un Style qui
est déjà un ResourceDictionary élément.
OriginalL'auteur VS1 | 2013-02-13
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayez d'utiliser la
x:Shared
attribut?Pour plus d'informations, lisez ici.
Dans le cas où cela ne fonctionne pas, vous pouvez stocker un modèle dans vos ressources, au lieu de le bouton et utilisez un ContentControl à l'intérieur de votre fenêtre pour l'afficher.
Et vous utilisez l'exemple ci-dessus, vous devez utiliser la balise suivante. <StaticResource ResourceKey="buttonResource" />
Excellent, x:Partagé viens de résoudre mon problème pour le partage d'un contrôle entre les différents points de Vue.
OriginalL'auteur Alex Shtof
Essayer:
Je ne vois pas en quoi ce serait différent. Pouvez-vous poster le code de votre ContentControl?
J'ai ajouté le code pour l'utilisation de ContentControl dans les deux Fenêtre.les fichiers xaml.. L'utilisation réelle n'est pas un bouton mais un contrôle différent, et ses parce que nous voulons changer la ressource fichier xaml dans les futures versions sans avoir à changer de Fenêtre.fichier xaml code...
Dans l'exemple que j'ai écrit buttonResource n'est plus un Bouton, mais un style, de sorte que vous ne pouvez pas l'utiliser pour le Contenu de la propriété d'un ContentControl. Dans ce cas, vous devriez essayer le code d'exemple de @Alex et définir le x:Partagé attribut à false.
OriginalL'auteur KBoek