如何从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议您这样做:

  1. 创build一个像ProvideDataTemplateService这样的服务(创build一个通常从Behaviorinheritance的服务)
  2. 使用你select的容器来注入这个服务,你希望有一些DataTemple。