我剛纔問了一個非常類似的問題,但我沒有得到任何有用的響應。我希望有人能幫助我。
我有一個現有的托盤應用程序被編程爲Windows窗體應用程序。 我有一個現有的設置窗體編程爲WPF。
托盤應用程序需要能夠: *打開設置應用程序n次,一次只打開一個實例 *當用戶關閉設置應用程序時接收通知。
設置應用程序使用ResourceDictionary,我相信它意味着它必須從App.xaml啓動。
我可以打開一次設置窗口並使用下面的代碼通知托盤何時關閉,但我無法再次打開它。
if (gui == null)
{
//shell = new mainWindow();
//shell.CloseEvent += settings_FormClosed;
gui = new App();
//gui.ShutdownMode = ShutdownMode.OnExplicitShutdown;
gui.MainWindow = shell;
gui.InitializeComponent();
//gui.Run();
gui.Exit += new System.Windows.ExitEventHandler(settings_FormClosed);
IsUIOpen = true;
}
如果我取消上面的行註釋,然後我可以攔截關閉事件,並將可見性設置爲隱藏。用戶下次選擇「設置」時,我可以將其設置爲「可見」。但是,第一次打開Settings時,它不會觸發Exit事件,並且Shell不會獲取所有的ReferenceDictionary(或者無法訪問它),所以窗口顯示不正確。
有沒有辦法從應用程序運行WPF,並訪問MainWindow(通常看起來是空的,而不是我自己的窗口的類型),所以自定義的監聽器可以添加到mainWindow?
或者,有沒有辦法處置靜態應用程序,以便下次用戶單擊設置時可以重新實例化它。
我知道必須有一些方法讓WPF和Win Forms一起玩。感謝所有嘗試提供幫助的人。這一直讓我頭痛。
謝謝;這是一個很好的答案。我不希望代碼阻止,但我可以將其添加到單獨的線程來處理。我只有一個問題:有沒有辦法做到這一點,而不給絕對路徑? WPF是我解決方案中的一個項目;有沒有辦法引用它呢?再次感謝你的迴應。這一直困擾着我好幾天! – Tim
我相信你必須提供一個完整的路徑,但如果它是解決方案的一部分,你可以通過Assembly對象獲取執行路徑並從那裏構建到你的Settings應用程序。我更新了上面的答案以顯示格式。 – Josh
你真棒。我希望我可以把你的答案不止一個。非常感謝! – Tim