情景:
我有一个有一些DataTemplate资源的视图
<DataTemplate x:Key="myDragCueTemplate">
<Border Background="Blue"
Opacity="0.5"
Width="250">
<TextBlock Text="{Binding}" HorizontalAlignment="Left"></TextBlock>
</Border>
</DataTemplate>
我有一个从ListBox派生的自定义控件。在特定事件的自定义列表框中,我想从View的资源中获取datatemplate。
public class MyListBox : ListBox
{
public MyListBox()
{
this.DefaultStyleKey = typeof(MyListBox);
}
...
itemDragCue.ContentTemplate = this.Resources["myDragCueTemplate"] as DataTemplate;
...
我尝试将datatemplates添加到单独的.xaml文件中并添加了ResourceDictionary,但它仍然没有提取它。
如何在自定义控件的后端获取资源?
感谢。
答案 0 :(得分:2)
this.Resources
只会提供
<UserControl x:Class="MyListbox">
<UserControl.Resources>
我建议将myDragCueTemplate放在ResourceDictionary中。然后,您必须在后面的代码中读取ResourceDictionary,并提取您想要的特定资源。
试试这个
const string resourcesPath = "/AssemblyName;component/Resources.xaml";
Uri resourceUri = new Uri(resourcesPath, UriKind.Relative);
StreamResourceInfo sri = Application.GetResourceStream(resourceUri);
StreamReader sr = new StreamReader(sri.Stream);
ResourceDictionary dictionary = (ResourceDictionary) XamlReader.Load(sr.ReadToEnd());
itemDragCue.ContentTemplate = dictionary["myDragCueTemplate"] as DataTemplate;