如何从C#代码访问wpf中的ResourceDictionary?
我有一个在我想通过C#代码访问的xaml文件中定义的DataTemplate
。 任何人都可以告诉我如何访问它? 我添加了一个新的ResourceDictionary
文件,它的名字是Dictionary1.xaml 。 我有一个数据模板,如:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <DataTemplate x:Key="mytemplate"> <TextBlock Text="Name:" Background="Blue"/> </DataTemplate> </ResourceDictionary>
不是我有一个名为listBox1的ListBox
,我想分配给它的Itemtemplate
属性,但我没有得到我怎么能做到这一点?
你究竟在哪里定义它?
如果你在你的对象的ResourceDictionary中定义它,那么
Application.Current.Resources[typeof(yourDataTemplateTargetType)]
应该pipe用。 如果你将它定义为其他东西的成员,比如说一个ItemsControl,你需要得到一个ItemsControl实例的句柄并调用ItemTemplate属性。
编辑:好吧,我想我们正在某处。 所以你正在自己的文件中定义一个ResourceDictionary。 在您的UI中使用它并从代码中访问它之前,需要将该ResourceDictionary合并到您的应用程序中。 你在做这个吗?
如果你是,那么下一步就是获得这个资源。 每个FrameworkElement都有一个名为FindResource的方法。 这个方法非常好,因为它遍历ResourceDictionary树并尝试使用键来定位资源。 所以,如果你想从UserControl访问这个资源,你可以在后面的代码中进行以下操作:
FindResource(typeof(yourDataTemplateTargetType));
如果这不适合你,请告诉我们你是如何声明这个资源字典的,以及它是如何被合并到你的应用程序资源中的。
由于Application.Current
在我的情况下是空的,我已经结束了使用这个:
var myResourceDictionary = new ResourceDictionary(); myResourceDictionary.Source = new Uri("/DllName;component/Resources/MyResourceDictionary.xaml", UriKind.RelativeOrAbsolute);
然后通过使用myResourceDictionary["KeyName"] as TypeOfItem
获取指定的密钥
( 来源 )
例如,如果您在App.xaml文件的资源字典中有Button的模板,则可以使用以下代码访问它:
Application.Current.Resources[typeof(Button)]
您可以访问您添加到项目中的资源字典,如下所示:
var rd = new ResourceDictionary(); rd.Source = new Uri("ms-appx:///Dictionary1.xaml");
然后你可以像这样访问存储在资源字典中的资源:
someObject.Property = rd["mytemplate"];
注意:
您必须根据您创build的相对于项目的基本目录的位置,将URI修改为资源字典。
上述任何一种方法都可以根据位置获取资源,如果您遵循MVVMm,我build议您这样做:
- 创build一个像ProvideDataTemplateService这样的服务(创build一个通常从Behaviorinheritance的服务)
- 使用你select的容器来注入这个服务,你希望有一些DataTemple。