通过WPF中的代码隐藏访问资源

我有一个自定义集合在我的窗口资源中定义如下(在一个Sketchflow应用程序,所以窗口实际上是一个UserControl):

<UserControl.Resources> <ds:MyCollection x:Key="myKey" x:Name="myName" /> </UserControl.Resources> 

我希望能够在代码隐藏中引用这个集合,我期望这个集合是由x:Name组成,但是我似乎无法访问它。

我可以使用它的参考

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

但是这看起来很骇人听闻。 这是不好的做法,什么会更好? 谢谢 :)

您应该使用System.Windows.Controls.UserControlFindResource()TryFindResource()方法。

此外,一个好的做法是创build一个string常量,将您的密钥的名称映射到资源字典中(以便您只能在一个位置更改它)。

你也可以使用this.Resources["mykey"] 。 我想这并不比你自己的build议好。

不完全直接的答案,但强烈的相关:

如果资源在不同的文件中 – 例如ResourceDictionary.xaml

你可以简单地将x:Class添加到它:

 <ResourceDictionary x:Class="Namespace.NewClassName" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > <ds:MyCollection x:Key="myKey" x:Name="myName" /> </ResourceDictionary> 

然后在后面的代码中使用它:

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

您可以使用像这样的资源键:

 <UserControl.Resources> <SolidColorBrush x:Key="{x:Static local:Foo.MyKey}">Blue</SolidColorBrush> </UserControl.Resources> <Grid Background="{StaticResource {x:Static local:Foo.MyKey}}" /> 
 public partial class Foo : UserControl { public Foo() { InitializeComponent(); var brush = (SolidColorBrush)FindResource(MyKey); } public static ResourceKey MyKey { get; } = CreateResourceKey(); private static ComponentResourceKey CreateResourceKey([CallerMemberName] string caller = null) { return new ComponentResourceKey(typeof(Foo), caller); ; } }