Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Excel VSTO: используйте ResourceDictionary, который находится в отдельной сборке

Автор вопроса: JayakrishnanОтветов: 1

В моем приложении VSTO мне нужно использовать ResourceDictionary, который находится в отдельной сборке.

Я создал отдельный ResourceDictionary с именем generic.xaml в приложении VSTO в папке themes, например /themes/generic.xaml. В этом файле я сослался на ResourceDictionary из внешней сборки, используя URI Pack.

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
   <ResourceDictionary.MergedDictionaries>
     <ResourceDictionary Source="pack://application:,,,/ExternalAssemblyName;component/Themes/resource.xaml"  />
   </ResourceDictionary.MergedDictionaries>
 </ResourceDictionary>

Также изменена AssemblyInfo на следующее:

[assembly: ThemeInfo(
ResourceDictionaryLocation.None,
ResourceDictionaryLocation.SourceAssembly)]

Но все равно не повезло. Любая помощь была бы хороша.

P.S. Не предлагайте помещать ResourceDictionary в App.Xaml, поскольку я работаю над приложением VSTO, поэтому App.xaml не будет.

  • Если имя файла generic.xaml, укажите URL-адрес пакета как pack://application:,,,/ExternalAssemblyName;component/Themes/generic.xaml. Кроме того, ваша общая сборка загружается в AppDomain? user1672994 16.05.2018
  • Да, я определил URL-адрес пакета в соответствии с именем файла словаря ресурсов. Нет, не могли бы вы рассказать мне, как загрузить общую сборку в AppDomain? Jayakrishnan 16.05.2018

wpfvstoresourcedictionaryassemblyinfo

Ответы

Ответ 1 · didzispetkus

Использование VSTO не мешает вам использовать App.xaml :)

  1. Создайте App.xaml, как обычно, и импортируйте словарь ресурсов в Application.Resources.
  2. При запуске надстройки инициализируйте приложение WPF

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        //Ensure the singleton WPF Application is instantiated
        if (System.Windows.Application.Current == null)
        {
            new App();
        }
    
        //Take control of WPF application shutdown
        System.Windows.Application.Current.ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown;
    }
    
  3. Не забудьте закрыть приложение WPF при закрытии надстройки.

    private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
    {
        if (System.Windows.Application.Current != null)
        {
            System.Windows.Application.Current.Shutdown();
        }
    }
    
  4. Используйте свои стили в XAML

Пример на Github

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы