Доступ к ресурсам Silverlight по ключу из кода бэкэнда CustomControl - PullRequest
1 голос
/ 03 апреля 2012

Сценарий:

У меня есть представление, которое имеет некоторые ресурсы DataTemplate

<DataTemplate x:Key="myDragCueTemplate">
        <Border Background="Blue"
                Opacity="0.5"
                Width="250">
            <TextBlock Text="{Binding}" HorizontalAlignment="Left"></TextBlock>
        </Border>
    </DataTemplate>

У меня есть пользовательский элемент управления, полученный из ListBox. Внутри настраиваемого списка определенного события я хочу получить табличку с данными из ресурсов представления.

public class MyListBox : ListBox
{
    public MyListBox()
    {
        this.DefaultStyleKey = typeof(MyListBox);
    }
 ...

 itemDragCue.ContentTemplate = this.Resources["myDragCueTemplate"] as DataTemplate;

 ...

Я попытался добавить шаблоны данных в отдельный файл .xaml и добавил ResourceDictionary, но он все еще не поднял его.

Как получить ресурс в бэкэнде пользовательского элемента управления?

Спасибо.

1 Ответ

2 голосов
/ 03 апреля 2012

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;
...