这是一种使用 WPF 从可停靠窗格显示无模式对话框的方法吗?

Is this a way to show a modeless dialog from a dockable pane using WPF?

我正在构建 Revit 插件。它由一个可停靠窗格组成,该窗格(在其他元素中)有一个按钮。当用户单击此按钮时,我想打开一个新的、单独的 window。

目前,我创建了一个新的 Window,但我不知道这样做是否正确,因为现在我在任务栏上看到两个 Revit 图标。我没有 Revit 用户的经验,我是 Revit 开发的新手,所以我不确定是否应该是这种情况(两个图标)并且听起来很愚蠢,我没有安装随机插件的管理员权限并获得预期的用户体验。

我使用以下代码创建了一个 Window

ParametersMissingValueWindow parametersMissingValueWindow = new ParametersMissingValueWindow();
parametersMissingValueWindow.Show();

基于我对可停靠窗格的理解,我想我不想创建另一个可停靠窗格,而只是一个简单的无模式对话框。我无法找到任何使用 WPF 的示例。因此,我们非常感谢任何信息,无论这是要走的路还是帮助实现这一点。

您可以使用 WPF 设置 window 在 revit 中使用。

MyWPF menu = new menu();
System.Windows.Window wind = new System.Windows.Window();
wind.ShowDialog();    //--> the window shows up and make stuff for revit

如果您需要菜单是可停靠的,请检查此 source

可能不是最新的,您需要调整代码以适应新的 api。

Show 方法采用可选的父 window 参数。将 Revit main window 指定为父级 window,您的无模式对话将被识别为属于 运行 Revit 进程。可从 MainWindowHandle property.

访问
var MyWindow = new MyWindow();
HwndSource hwndSource = HwndSource.FromHwnd(UIApplication.MainWindowHandle);
Window wnd = hwndSource.RootVisual as Window;
if (wnd != null)
{
    MyWindow.Owner = wnd;
    //MyWindow.ShowInTaskbar = false;
    MyWindow.Show();
}

没必要给ShowInTaskbar赋值属性,但它确实实现了我一开始想做的事情(任务栏只有一个程序打开),所以我放弃了作为解决方案的一部分,但注释掉了。

非常感谢 Jeremy Tammik 指出 parent 属性。