1

在 WPF 窗口的构造函数中,我将其所有者设置为使用WindowInteropHelper. 设置后,OwnerWPF Window 的属性仍然为空。

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.Left,Owner.Width等。无论所有者是 WPF Window 还是 WinForm。

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

4

1 回答 1

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 来拉出适当的位置。

于 2013-10-18T20:59:51.520 回答