如何在.NET MAUI中获取控件Handle以适配Windows应用迁移及第三方库调用
解答
是否可以在.NET MAUI中获取控件的Handle
可以,仅针对Windows平台可通过平台特定API获取,MAUI在Windows端基于WinUI 3实现,你可以通过如下方式拿到对应句柄:
- 先引入所需命名空间
#if WINDOWS using Microsoft.Maui.Platform; using WinRT.Interop; #endif
- 控件加载完成后调用转换方法获取句柄
#if WINDOWS // 此处myMauiControl为你的MAUI控件实例 var nativeWinUIControl = myMauiControl.ToPlatform(); IntPtr controlHandle = WindowNative.GetWindowHandle(nativeWinUIControl); #endif
是否支持创建带独立Handle的控件
和WPF的表现一致,默认WinUI 3的原生控件本身没有独立HWND,上述方法获取到的默认是控件所属主窗口的句柄。如果需要独立Handle,可通过以下两种方案实现:
- 方案1:使用MAUI的原生控件嵌入能力,嵌入WinForms/WPF控件,这类控件自带独立HWND,可直接按照你之前WinForms的写法拿到独立Handle,需要先在项目中开启对应平台的互操作支持
- 方案2:自行通过WinUI 3的
DesktopWindowXamlSource创建独立的HWND承载内容,再将其嵌入到MAUI页面中
注意事项
- 所有获取Handle的逻辑必须在控件完成加载(即控件的
Loaded事件触发后)再执行,否则会返回无效值 - 所有平台特定代码需要加
#if WINDOWS条件编译符,避免其他平台编译报错
内容的提问来源于stack exchange,提问作者developer82
相关产品推荐
相关产品推荐

