【问题标题】:Is this a way to show a modeless dialog from a dockable pane using WPF?这是一种使用 WPF 从可停靠窗格显示无模式对话框的方法吗?
【发布时间】:2019-08-15 18:28:46
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c# wpf revit-api revit


    【解决方案1】:

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

    【讨论】:

    • 听起来完全是我需要的东西!我正在尝试找到一种将其应用于我的 WPF 插件的方法,因为您提到的 Show 具有 Form 元素的可选父参数,这些参数在 WPF 中不存在,我不确定他们的 WPF 是什么相当于是。如果您碰巧知道,请编辑您的答案。
    • 另外,为什么UIApplication.MainWindowHandleUIControlledApplication.MainWindowHandle 都返回MainWindowHandle?它是同一个句柄吗,我从哪里检索它有关系吗?
    • 它是同一个句柄,不管你用哪个句柄。我不知道 WPF。
    【解决方案2】:
    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 属性。

    【讨论】:

      【解决方案3】:

      您可以使用 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。

      【讨论】:

      • 第二行和第三行代码不会显示模态对话框吗?我想知道如何呈现无模式对话框。
      • 我的错,你是对的,要显示一个无模式对话框,你可以检查这个例子:code.msdn.microsoft.com/windowsdesktop/…我没有在 revit 上测试,但它应该可以工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      • 2020-10-28
      • 2015-10-20
      相关资源
      最近更新 更多