2011-10-18 6 views
5

カスタムシェイプのWPFウィンドウの一部だけにAero背景ブラーを適用する必要があります。問題は、DWMでぼかしを適用するには、DwmEnableBlurBehindWindow関数のウィンドウハンドルを用意する必要があることです。WPFポップアップコントロールのHwndを取得できますか?

私はWPFポップアップコントロールが実際は別のウィンドウであると言われています。それはいいです。ぼかしを適用するためのポップアップのハンドルを取得できますか?もしそうなら、どうですか?

答えて

8

この

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

またはこれを試してみてくださいが、この1は、実際のWindows用に動作しますが、将来の参照のために役立つかもしれません。

IntPtr handle = new WindowInteropHelper(myWindow).Handle; 
+1

あなたはHwndSource.FromVisual 'に' myPopup.Child'を渡す必要があります() 'Cleberの答えのように。それ以外の場合は、Popupの親のHwndSourceを取得します(PopupがXAMLで宣言された親ウィンドウです)。しかし、 'myPopup.Child'を渡すと、ポップアップによって作成されたウィンドウが表示されます。 – nevermind

0

カスタムクラス名はありますか?その場合は、クラス名(FindWindow)を介してウィンドウハンドルを見つけることができます。

Windowsの場合、私はちょっとハッカータイプなので、「適切な」方法を見つけようとするのではなく、通常は最初に試してみます。私のためのすべての古いものは、もはやこれ以上は何もしません - blackbeltvb.comを参照してください。

私がこれをやった2つの他の方法は、1)ウィンドウの作成メッセージをフックするには、 (SetWindowsHookEx)と2)使用されているすべてのウィンドウハンドルを列挙し、新しいものを監視します。

8

これを試してみてください:

<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; 
関連する問題