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

时间:2019-03-25 13:36:48

标签: c# wpf revit-api revit

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

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

enter image description here

我使用以下代码创建Window

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

基于对我拥有的可停靠窗格的理解,我认为我不想创建另一个可停靠窗格,而只是创建一个简单的无模式对话框。我找不到使用WPF的任何示例。因此,高度赞赏任何信息,无论这是要走的道路还是对实现这一目标的帮助。

3 个答案:

答案 0 :(得分:1)

Show方法采用可选的父窗口参数。将Revit主窗口指定为父窗口,您的无模式对话将被识别为正在运行的Revit进程。可从MainWindowHandle property进行访问。

答案 1 :(得分:0)

您可以使用WPF设置要在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。

答案 2 :(得分:0)

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属性。