Закрытие WPF в Outlook - PullRequest
       7

Закрытие WPF в Outlook

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

Я создаю outlook vsto addin, который запускает окно WPF.
Работает нормально, но когда я закрываю окно WPF и пытаюсь открыть еще одно, я получаю

Невозможносоздать более одного экземпляра System.Windows.Application в одном и том же AppDomain.

исключение.

Я знаю, что класс приложения является одиночным, я понимаю исключение, но я не знаюкак закрыть приложение, когда окно закрыто.Я попытался установить ShutdownMode в App.xaml и App.Shutdown() при закрытии окна, но безуспешно.Любые предложения о том, как заставить это работать?

App.xaml

<Application x:Class="OutlookAddIn3.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:local="clr-namespace:OutlookAddIn3"
         StartupUri="MainWindow.xaml"
         ShutdownMode="OnMainWindowClose">
<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.DeepPurple.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Lime.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

App.xaml.cs

public partial class App : Application
{
    public static App myapp;
    public App()
    {
        InitializeComponent();
    }

    public static void EnsureApplicationResources()
    {
        if (App.myapp == null)
        {
            myapp = new App();
        }                                
    }
}

MainWindow.cs

    public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_Closing(object sender, EventArgs e)
    {
        //App.Current.Shutdown();
        App.myapp.Shutdown();
    }
}

Ribbon1.cs

public partial class Ribbon1
{
    private void button1_Click(object sender, RibbonControlEventArgs e)
    {
        App.EnsureApplicationResources();
    }
}

1 Ответ

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

Вам необходимо установить для поля myapp значение null, чтобы новый объект App создавался при следующем вызове EnsureApplicationResources():

private void button1_Click(object sender, RibbonControlEventArgs e)
{
    App.myapp = null;
    App.EnsureApplicationResources();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...