Excel VSTO: используйте ResourceDictionary, который находится в отдельной сборке - PullRequest
0 голосов
/ 16 мая 2018

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

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

<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 не будет.

1 Ответ

0 голосов
/ 06 июня 2018

Использование 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

...