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

本文关键字:所有者 获取 位置 属性 拥有 WPF WinForm | 更新日期: 2023-09-27 18:35:56

在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 的引用之外,我还有什么选择?

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

属性必须是要设置的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,并在存储在helper.Owner属性中的HWND上使用 P/Invoke 来提取适当的位置。