从WPF UserControl访问ResourceDictionary

7 c# wpf xaml resourcedictionary

我试图通过C#访问UserControl代码隐藏中的资源字典,但我收效甚微.

合并词典:

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/Resources/BiometricDictionary.xaml" />                
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)

嵌入字典:

<UserControl.Resources>
    <BitmapImage x:Key="imageDefault">/Resources/Images/default_thumb.png</BitmapImage>
    <BitmapImage x:Key="imageDisconnected">/Resources/Images/disconnect_thumb.png</BitmapImage>
    <BitmapImage x:Key="imageFailed">/Resources/Images/failed_thumb.png</BitmapImage>
    <BitmapImage x:Key="imageSuccess">/Resources/Images/success_thumb.png</BitmapImage>
</UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)

代码背后:

        var resourceDictionary = new ResourceDictionary();
        resourceDictionary.Source = new Uri("/Resources/BiometricDictionary.xaml", UriKind.Relative);
Run Code Online (Sandbox Code Playgroud)

我已经尝试了所有的例子和有用的提示,但很快就会出现.现在,成功将是加载字典的能力.有什么建议?

Pet*_*ebb 7

要在代码隐藏中访问UserControl的一个XAML资源,您只需访问UserControl的Resources属性即可.像这样的东西:

BitmapImage myImage = (BitmapImage)this.Resources["imageDefault"];
Run Code Online (Sandbox Code Playgroud)

但是,首选方法是使用FindResource(),它将搜索整个逻辑树以匹配键,而不仅仅是调用它的对象.

BitmapImage myImage = (BitmapImage)this.FindResource("imageDefault");
Run Code Online (Sandbox Code Playgroud)


Mar*_*ter 0

那么,您在 UserControl 的程序集中定义了 ResourceDictionary,并且想要从该 UserControl 的代码隐藏中访问它?

你应该能够。但是,如果您列出的代码位于构造函数中,则您可能无法访问资源字典(可能尚未加载)。尝试将相同的代码添加到用户控件的“已加载”事件中,看看是否有效。如果您只是尝试访问资源,例如样式或模板,则直接从类中使用“ FindResource ”或“ TryFindResource ”函数也应该可以工作(即您不需要具有类型为“ ”的对象资源字典”)。

希望有帮助!