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
.