Как добраться до стиля ResourceDictionary, когда он загружается из внешнего xap и сборки снабжены MEF? - PullRequest
3 голосов
/ 12 июня 2010

У меня есть следующие настройки:

Основное приложение загружает XAP с реализацией IPlugin.Плагин содержит «DisplayPanel», которая содержит элемент управления со ссылкой на другие элементы управления.Здесь DisplayPanel - просто контейнерный элемент управления для отображения ссылочного элемента управления.

Этот элемент управления, на который ссылаются, из сборки, использует стиль из xaml ResourceDictionary в этой сборке.По крайней мере, это то, что я хочу иметь.Проблема в том, что указанный элемент управления выдает ошибку:

Не удается найти ресурс с именем / ключом PlayerPanelGrad [Строка: 1500 Позиция: 127]

попытался понять стиль, сославшись на theResourceDictionary через ссылку на словарь Merged Resource:

       <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="TableControls;component/ControlsStyle.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>

Но это не работает.

Как бы вы подошли к этому?

Ответы [ 4 ]

1 голос
/ 08 июля 2010

единственный способ заставить его работать, это загрузить словарь ресурсов в элемент управления (в библиотеке классов) программно перед вызовом InitializeComponent:

public ActionPanel()
{
     StreamResourceInfo sr = Application.GetResourceStream(
          new Uri("TableControls;component/ControlsStyle.xaml", UriKind.Relative));
     Application.Current.Resources.Add("plop",sr.Stream);
     // Required to initialize variables
     InitializeComponent();
}
0 голосов
/ 14 августа 2015

Для дальнейшего использования мой XAML-файл был найден в подкаталоге решения, для которого требовался символ /, но файл находился также в подкаталоге с именем Assets внутри него.

<ResourceDictionary 
     Source="/MyAssemblyName;component/Assets/RadResources.xaml" />

Такжефайл .XAML был построен как Page в решении.

0 голосов
/ 04 мая 2011

// сначала загружаем other.dll динамически, а затем используем следующий код:

       StreamResourceInfo srf = Application.GetResourceStream(new Uri("otherdll;component/Resources/Brush.xaml", UriKind.Relative));

        StreamReader sr = new StreamReader(srf.Stream);
        string stt = sr.ReadToEnd();
        ResourceDictionary dict = XamlReader.Load(stt) as ResourceDictionary;
        Application.Current.Resources.MergedDictionaries.Add(dict);
0 голосов
/ 04 ноября 2010

Этот вопрос может помочь, хотя, если честно, я все еще пытаюсь сам разобраться: Использование MEF для импорта шаблона данных WPF?

...