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

Max*_*lov 5 .net api wpf popup handle

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

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

dow*_*for 10

试试这个

HwndSource source = (HwndSource)HwndSource.FromVisual(myPopup)
Run Code Online (Sandbox Code Playgroud)

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

IntPtr handle = new WindowInteropHelper(myWindow).Handle;
Run Code Online (Sandbox Code Playgroud)

  • 您应该像 Cleber 的回答一样将 `myPopup.Child` 传递给 `HwndSource.FromVisual()`。否则,您将获得 Popup 父级的 HwndSource(这是您的父窗口,在 XAML 中声明 Popup 的位置)。但是如果你通过 `myPopup.Child` 你会得到一个由 Popup 创建的窗口。 (6认同)

小智 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;
Run Code Online (Sandbox Code Playgroud)