WinForm拥有的WPF具有null所有者属性+需要获取所有者位置

时间:2013-10-18 20:56:48

标签: c# .net wpf winforms

在WPF窗口的构造函数中,我使用WindowInteropHelper将其所有者设置为WinForm。设置此项后,WPF窗口的Owner属性仍为null。

public WpfWindow(System.Windows.Forms.Form owner)
{
    if (owner != null)
    {
        var helper = new System.Windows.Interop.WindowInteropHelper(this);
        helper.Owner = owner.Handle;

        var Owner.Width; // Owner is null
     }
}

我需要获取有关父级的位置信息,并希望使用Owner.LeftOwner.Width等,无论所有者是WPF窗口还是WinForm。

这可能吗?如果没有,除了在我的WPF类中保留对WinForm的引用之外,我还有哪些选项?

1 个答案:

答案 0 :(得分:2)

Window.Owner属性必须是Window(WPF)才能设置。

WindowInteropHelper允许您设置用于对话框放置等的窗口所有者,但不会设置所有者属性。

正如您在方法中直接执行此操作一样,您可以直接使用owner参数:

public WpfWindow(System.Windows.Forms.Form owner)
{
    if (owner != null)
    {
        int width = owner.Width; // Just use the parameter...
     }
}
  

这可能吗?如果没有,除了在我的WPF类中保留对WinForm的引用之外,我还有哪些选项?

如果你需要在构造函数之外使用它,这是一个选项。另一个选择是保持WindowInteropHelper左右,并使用存储在HWND属性中的helper.Owner上的P / Invoke来提取相应的位置。