是否有可能获得WPF Popup控件的Hwnd?

时间:2011-10-18 23:52:25

标签: .net wpf api popup handle

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

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

3 个答案:

答案 0 :(得分:9)

试试这个

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

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

IntPtr handle = new WindowInteropHelper(myWindow).Handle;

答案 1 :(得分:9)

试试这个:

<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;

答案 2 :(得分:0)

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

当涉及到Windows中的这些东西时,我有点像黑客类型,所以这是我通常首先尝试的,而不是试图发现“正确”的方法。但是,对我而言,所有旧东西都不再做了 - 请参阅blackbeltvb.com

我做的另外两种方法是1)挂钩窗口创建消息,注意弹出窗口,然后做一些事情(SetWindowsHookEx)和2)枚举正在使用的所有窗口句柄,然后注意新的那一个。