如何从WPF窗口显示Winforms对话框?

4
这个问题的相反情况已经有多次回答了。
public static void SetOwner(object activeWindow, object dialog)
{
    if (IsWindow(dialog) && IsWindow(activeWindow))
    {
        (dialog as Window).Owner = (activeWindow as Window);
    }
    else if (IsForm(dialog) && IsForm(activeWindow))
    {
        (dialog as Form).Owner = (activeWindow as Form);
    }
    else if (IsWindow(dialog) && IsForm(activeWindow))
    {
        var wih = new WindowInteropHelper(dialog as Window);
        wih.Owner = (activeWindow as Form).Handle;
    }
    else if (IsForm(dialog) && IsWindow(activeWindow))
    {
        var dialogForm = dialog as Form;
        var ownerWindow = activeWindow as Window;
        // What goes here?
    }           
}

这个问题:https://dev59.com/TXNA5IYBdhLWcg3wF5uO - Amittai Shapira
您无需指定所有者,Form.ShowDialog() 会自动找到一个。 - Hans Passant
这个回答解决了你的问题吗?将WPF窗口作为父窗口的Winform对话框 - StayOnTarget
2个回答

8
为了补充SLaks的答案,这里有一个如此类的示例:
```

要扩展SLaks的答案,这里有一个如此类的示例:

```
public class WpfWindowWrapper : System.Windows.Forms.IWin32Window
{
    public WpfWindowWrapper(System.Windows.Window wpfWindow)
    {
        Handle = new System.Windows.Interop.WindowInteropHelper(wpfWindow).Handle;
    }

    public IntPtr Handle { get; private set; }
}

下面是在 WPF 窗口代码后台中使用它的示例:

var winForm = new MyWinForm();
winForm.ShowDialog(new WpfWindowWrapper(this));

以这种方式,Winform对话框就像WPF窗口的一个合适子级,具有正确的模态行为。

4

我不得不对我的IDialogService API进行一些重构,但新的解决方案现在非常好用。谢谢! - Chris McKenzie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接