当前位置:  开发笔记 > 编程语言 > 正文

如何从C#代码访问wpf中的ResourceDictionary?

如何解决《如何从C#代码访问wpf中的ResourceDictionary?》经验,为你挑选了3个好方法。

DataTemplate在xaml文件中定义了我想通过C#代码访问的文件.任何人都可以告诉我如何访问它?我添加了一个新ResourceDictionary文件,它的名字是Dictionary1.xaml.我有一个数据模板,如:


    
        
    

不是我有一个ListBox名为listBox1,我想将它分配给它的Itemtemplate属性,但我不知道怎么办呢?



1> itsho..:

因为Application.Current在我的情况下是空的,我最终使用了这个:

    var myResourceDictionary = new ResourceDictionary();
    myResourceDictionary.Source =
        new Uri("/DllName;component/Resources/MyResourceDictionary.xaml",
                UriKind.RelativeOrAbsolute);  

然后通过使用获取我需要的指定密钥 myResourceDictionary["KeyName"] as TypeOfItem

(来源)


我个人认为这是最好的方法,就好像你要在一个库或任何地方定义它,它仍然可以工作,在接受的答案中,你必须将所有字典合并到你的应用程序中,这可能是一种过度杀伤,或者不可行.

2> Szymon Rozga..:

你究竟在哪里定义它?

如果您在对象的ResourceDictionary中定义它,那么

Application.Current.Resources[typeof(yourDataTemplateTargetType)] 

应该管用.如果您将其定义为其他内容的成员(例如,一个ItemsControl),则需要获取ItemsControl实例的句柄并调用ItemTemplate属性.

编辑:好的,我想我们到了某个地方.所以你要在自己的文件中定义一个ResourceDictionary.在您可以在UI中使用它并从后面的代码访问它之前,您需要将该ResourceDictionary合并到您的应用程序中.你在做这个吗?

如果是,那么下一步就是获取此资源.每个FrameworkElement都有一个名为FindResource的方法.这种方法很棒,因为它遍历ResourceDictionary树并尝试使用密钥定位资源.因此,如果要从UserControl访问此资源,可以在后面的代码中执行以下操作:

FindResource(typeof(yourDataTemplateTargetType));

如果这对您不起作用,请告诉我们您如何声明此资源字典以及它如何合并到您的应用程序资源中.


我不明白.这个答案不使用密钥.

3> Jakob Christ..:

例如,如果您在App.xaml文件的资源字典中有Button模板,则可以使用以下代码访问它:

Application.Current.Resources[typeof(Button)]

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有