Accéder à une ressource via codebehind dans WPF

J’ai une collection personnalisée définie dans les ressources de ma fenêtre comme suit (dans une application Sketchflow, la fenêtre est en réalité un UserControl):

   

Je veux pouvoir faire référence à cette collection dans le codebehind, ce à quoi je m’attendais serait le x: Name, mais je n’arrive pas à y accéder.

Je peux obtenir une référence en utilisant

 myRef = (MyCollection) this.FindName("myKey"); 

mais cela semble pirate. Est-ce une mauvaise pratique, et quoi de mieux? Merci 🙂

Vous devez utiliser les FindResource() ou TryFindResource() System.Windows.Controls.UserControl .

En outre, une bonne pratique consiste à créer une constante de chaîne qui mappe le nom de votre clé dans le dictionnaire de ressources (afin de pouvoir le modifier à un seul endroit).

Vous pouvez également utiliser this.Resources["mykey"] . Je suppose que ce n’est pas beaucoup mieux que votre propre suggestion.

Pas exactement la réponse directe, mais fortement liée:

Dans le cas où les ressources sont dans un fichier différent – par exemple ResourceDictionary.xaml

Vous pouvez simplement y append x:Class :

    

Et puis l’utiliser dans le code derrière:

 var res = new Namespace.NewClassName(); var col = res["myKey"]; 

Vous pouvez utiliser une clé de ressource comme celle-ci:

  Blue   

 public partial class Foo : UserControl { public Foo() { InitializeComponent(); var brush = (SolidColorBrush)FindResource(MyKey); } public static ResourceKey MyKey { get; } = CreateResourceKey(); private static ComponentResourceKey CreateResourceKey([CallerMemberName] ssortingng caller = null) { return new ComponentResourceKey(typeof(Foo), caller); ; } } 

Si vous souhaitez accéder à une ressource depuis une autre classe (pas un code xaml), vous pouvez utiliser

 Application.Current.Resources["resourceName"]; 

à partir de l’espace de noms System.Windows .