Можно ли получить Hwnd элемента управления WPF Popup? - PullRequest
5 голосов
/ 19 октября 2011

Мне нужно применить размытие фона Aero только к части пользовательского окна WPF. Проблема в том, что для применения размытия в DWM мне нужно предоставить дескриптор окна для функции DwmEnableBlurBehindWindow.

Мне сказали, что всплывающий элемент управления WPF на самом деле является отдельным окном. Это хорошо. Могу ли я получить ручку всплывающего окна, чтобы применить к нему размытие? Если так, то как?

Ответы [ 3 ]

9 голосов
/ 19 октября 2011

Попробуйте это

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

или это, но этот работает только для фактической Windows, но может помочь для будущих ссылок.

IntPtr handle = new WindowInteropHelper(myWindow).Handle;
9 голосов
/ 31 января 2012

Попробуйте это:

<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;
0 голосов
/ 19 октября 2011

Есть ли у него имя собственного класса? Если это так, вы можете найти дескриптор окна по имени класса (FindWindow).

Я немного хакерский тип, когда речь заходит об этом в Windows, поэтому я обычно стараюсь сначала, а не пытаться найти «правильный» метод. Все старые вещи для меня, однако, я больше этим не занимаюсь - см. Blackbeltvb.com

Два других способа, которые я сделал, это 1) перехватить сообщения о создании окон, посмотреть, что это всплывающее окно, затем что-то с ним сделать (SetWindowsHookEx) и 2) перечислить все используемые дескрипторы окон, затем посмотреть новый.

...