我们如何设置Window的Owner为指定的Handle呢?这涉及一个win32交互的问题。
方法一:使用WindowInteropHelper
首先我们一般的常规做法是,重写窗体的OnSourceInitialized方法或者绑定SourceInitialized事件。在它们相关联的代码中面去处理。为什么在这里处理呢,因为窗体执行到这一步才能确定自己的Handle值。WindowInteropHelper取到的Handle值才有意义,否则就要使用EnsureHandle了。
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
var helper = new WindowInteropHelper(this);
helper.Owner=Process.GetCurrentProcess().MainWindowHandle;
}
方法二:HwndSource
this.Owner = (Window)HwndSource.FromHwnd(WindowHelper.RevitHandle)?.RootVisual;
注意:
如果窗体是通过ShowDialog进行显示,那么就不能再在OnSourceInitialized方法里设置Owner了,系运行时系统会报错。调整方案就是,在调用ShowDialog之前或者窗体构造函数里设置窗体的Owner

本文介绍了在Windows应用程序中设置窗口所有者(Owner)的两种常见方法:使用WindowInteropHelper和HwndSource。通过示例代码详细解释了如何在窗体的OnSourceInitialized方法中实现这一功能,并提醒在使用ShowDialog时的注意事项。
708

被折叠的 条评论
为什么被折叠?



