Silverlight从CustomControl后端代码访问Key by Key

时间:2012-04-03 19:23:24

标签: silverlight xaml mvvm silverlight-5.0

情景:

我有一个有一些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,但它仍然没有提取它。

如何在自定义控件的后端获取资源?

感谢。

1 个答案:

答案 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;