将非WPF window设为 WPF Window的Owner

Posted lonelyxmas

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将非WPF window设为 WPF Window的Owner相关的知识,希望对你有一定的参考价值。

原文:将非WPF window设为 WPF Window的Owner

如果WPF Content是寄宿在Win32 窗体或Windows Form中,则在WPF模块中可能不会存在WPF Window(WPF模块的根可能是个UserControl).如果在WPF模块中弹出对话框,则设定其Owner不是那么方便。

WPF Window class只提供了Window类型的Owner属性.

但是.net framework提供了WindowInteropHelper.Owner 属性可以将Window的Owner设为一个handle.因此我们只要能获取到任何UI元素的Handle,我们便可以将其设为Window的Owner,不管其是不是一个WPF Window. 而.net framework又提供了HwndSource类型,利用该类型通过如下三步我们能设定WPF Window的Owner为一个普通的Visual:

1. 通过该类型的静态方法FromVisual(Visual visual)我们可以得到任何WPF Visual元素的HwndSource,

2. 通过HwndSource的Handle属性我们可以得到该Visual元素的Win32 Handle

3. 最后我们将得到的Win32 Handle赋给WindowInteropHelper.Owner,这样便将该Handle所代表的Visual设定为WindowInteropHelper所代表的Window的Owner了。

 

以上是关于将非WPF window设为 WPF Window的Owner的主要内容,如果未能解决你的问题,请参考以下文章

关于window form 和WPF.

wpf怎么自定义窗口

WPF 基础控件之Window样式

WPF window页面跳转

在uwp仿制WPF的Window

WPF 创建无边框的圆角窗口