2016-01-06 46 views
1

我正在爲Revit的插件工作。 Revit只允許dll類型的插件,我選擇了c#和wpf作爲gui。我無法初始化wpf,因此我需要將它作爲內容包含在system.windows.window中。 現在,如果我用右上角的X程序繼續關閉窗口(循環處理等),它不會終止。 Window.close()再次關閉窗口而不是它自己的應用程序。 我應該如何退出我的應用程序,而不是讓它潛伏在陰影中?正確退出Revit的wpf插件

[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)] 
public class FDNMain : IExternalCommand 
{ 
    public Result Execute(ExternalCommandData CommandData, ref string message, ElementSet elements) 
    { 
     FDNControl wpfControl = new FDNControl(); 
     return Result.Succeeded; 
    } 
} 

以上是Revit外部命令類,它無法初始化(顯示)wpfControl。所以我需要用下面的System.Windows.Window包裝wpfcontrol:

Window hostWindow = new Window(); 
hostWindow.Content = wpfControl; 
hostWindow.Show(); 
+0

你是什麼意思「我無法初始化wpf原生」? – Maxence

+0

我已將externalcommand類添加到無法直接初始化wpf用戶控件的帖子中。 –

回答

0

我定義了全局靜態變量,它在主窗口關閉時設置爲true。並設置這個條件在while語句中檢查以便繼續循環。如:

... 
    Global.hostWindow.Closing += hostWindow_Closing; 
... 

    private void hostWindow_Closing(object sender, EventArgs e) 
    { 
     Global.Closing = true; 
    } 
... 

    while (Nodes.Count > 0 && Global.Closing == false) 
    { 
    ... 
    } 
0

好的,我明白了。 Visual Studio中沒有用於類庫的XAML Window模板,但可以像創建UserControl一樣創建UserControl,然後將XAML中的UserControl標記更改爲Window

您還需要改變它在.xaml.cs(你也可以將其刪除,因爲它是一個局部類和父類是隱含的與XAML)。之後,您可以在窗口上撥打ShowDialog

+0

好吧,我已經從xaml切換到窗口,但它沒有解決應用程序不關閉的問題。當我的應用程序窗口處於活動狀態時,它也使得revit ui無法訪問。所以我會堅持在窗口內的xaml。 但是我發現主要的問題是我正在使用dispatcher.invoke方法在進程循環內保持進度條響應。 Afaic該方法保持應用程序在後臺運行,即使我點擊關閉。 如何檢測取消並打破主循環? –