是否可以获取WPF Popup控件的Hwnd?

问题描述 投票:0回答:3

我需要将 Aero 背景模糊仅应用于自定义形状的 WPF 窗口的一部分。问题是,要使用 DWM 应用模糊,我需要为

DwmEnableBlurBehindWindow
函数提供窗口句柄。

有人告诉我 WPF 弹出控件实际上是一个单独的窗口。那很好。我可以获得弹出窗口的句柄来对其应用模糊吗?如果是这样,怎么办?

.net wpf popup handle
3个回答
14
投票

试试这个:

<Popup Name="MyPop" IsOpen="True" Height="50" Width="50">
    <!--or other control-->
    <Rectangle/> 
</Popup>


// only after MyPop.IsOpen is true
IntPtr handle =  ((HwndSource)PresentationSource.FromVisual(MyPop.Child)).Handle;

13
投票

试试这个

HwndSource source = (HwndSource)HwndSource.FromVisual(myPopup)

或者这个,但这一个仅适用于实际的 Windows,但可能有助于将来的参考。

IntPtr handle = new WindowInteropHelper(myWindow).Handle;

0
投票

它有自定义类名吗?如果是这样,您可以通过类名(FindWindow)查找窗口句柄。

当涉及到 Windows 中的这些东西时,我有点像黑客,所以这就是我通常首先尝试的,而不是试图发现“正确”的方法。不过,对我来说,这些都是老东西了,我不再做太多这样的事了 - 请参阅 blackbeltvb.com

我这样做的另外两种方法是 1) 挂钩窗口创建消息,监视弹出窗口,然后对其执行某些操作 (SetWindowsHookEx) 和 2) 枚举正在使用的所有窗口句柄,然后监视新的窗口句柄一。

© www.soinside.com 2019 - 2024. All rights reserved.