7

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

合并字典:

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/Resources/BiometricDictionary.xaml" />                
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

嵌入式词典:

<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>

后面的代码:

        var resourceDictionary = new ResourceDictionary();
        resourceDictionary.Source = new Uri("/Resources/BiometricDictionary.xaml", UriKind.Relative);

我已经尝试了所有示例和有用的提示,但都不够用。现在,成功将是加载字典的能力。有什么建议么?

4

4 回答 4

7

要在代码隐藏中访问 UserControl 的 XAML 资源之一,您需要做的就是访问 UserControl 的 Resources 属性。像这样的东西:

BitmapImage myImage = (BitmapImage)this.Resources["imageDefault"];

不过,首选方法是使用 FindResource(),它将搜索整个逻辑树以查找与键的匹配项,而不仅仅是调用它的对象。

BitmapImage myImage = (BitmapImage)this.FindResource("imageDefault");
于 2009-06-02T17:45:21.350 回答
1

尝试删除您所在位置前面的正斜杠。您应该使用 /Resources 的唯一时间是您必须先上图书馆。像../资源

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
           <ResourceDictionary Source="Resources/BiometricDictionary.xaml" />                
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

希望这对您有所帮助。

于 2015-04-15T10:17:10.387 回答
0

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

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

希望有帮助!

于 2009-06-02T17:43:54.193 回答
0

d'哦...在编译到本地 bin 以便引用是相对的之后,我实现了在此处找到的包 URI 解决方案:ResourceDictionary in a separate assembly,然后 FindResource(x:key value here)。

@PeterAllenWeb,@Pwninstein,感谢您的快速回复并让我重新思考。

于 2009-06-02T18:24:38.477 回答