WPF—Win32交互

我们如何设置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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值