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.Left
、Owner.Width
等,无论所有者是 WPF 窗口还是 WinForm。
这可能吗? 如果没有,除了在 WPF 类中保留对 WinForm 的引用之外,我还有什么选择?
属性必须是要设置的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 来提取适当的位置。