我需要將Aero背景模糊應用於僅部分自定義形狀的WPF窗口。問題是,要使用DWM應用模糊,我需要爲DwmEnableBlurBehindWindow
函數提供一個窗口句柄。是否有可能獲得WPF Popup控件的Hwnd?
我被告知WPF彈出控件實際上是一個單獨的窗口。那很好。我可以得到一個彈出框的句柄來應用模糊嗎?如果是這樣,怎麼樣?
我需要將Aero背景模糊應用於僅部分自定義形狀的WPF窗口。問題是,要使用DWM應用模糊,我需要爲DwmEnableBlurBehindWindow
函數提供一個窗口句柄。是否有可能獲得WPF Popup控件的Hwnd?
我被告知WPF彈出控件實際上是一個單獨的窗口。那很好。我可以得到一個彈出框的句柄來應用模糊嗎?如果是這樣,怎麼樣?
試試這個
HwndSource source = (HwndSource)HwndSource.FromVisual(myPopup)
或本但這個只適用於實際的Windows,但可能有助於爲未來的引用。
IntPtr handle = new WindowInteropHelper(myWindow).Handle;
它有自定義類名嗎?如果是這樣,你可以通過類名(FindWindow)找到窗口句柄。
當談到Windows中的這些東西時,我有點像黑客類型,所以這就是我通常首先嚐試的方式,而不是試圖發現一個「正確的」方法。對我來說,所有舊的東西,但我不這麼做了 - 看到blackbeltvb.com
我做了這兩個其他方法是1)掛鉤窗口創建消息,注意彈出窗口,然後做一些事情(SetWindowsHookEx)和2)枚舉所有正在使用的窗口句柄,然後觀察新的窗口句柄。
試試這個:
<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;
你應該通過'myPopup.Child'到'HwndSource.FromVisual()'在克萊伯的答案。否則,您將獲得Popup父級的HwndSource(這是您的父窗口,其中Popup是在XAML中聲明的)。但是,如果你傳遞'myPopup.Child',你將得到一個由Popup創建的窗口。 – nevermind