2011-10-18 10 views
5

मुझे कस्टम-आकार वाली WPF विंडो के केवल हिस्से में एरो पृष्ठभूमि धुंध लागू करने की आवश्यकता है। समस्या यह है कि डीडब्लूएम के साथ धुंध लागू करने के लिए, मुझे DwmEnableBlurBehindWindow फ़ंक्शन पर विंडो हैंडल प्रदान करने की आवश्यकता है।क्या एक WPF पॉपअप नियंत्रण का Hwnd प्राप्त करना संभव है?

मुझे बताया गया है कि डब्ल्यूपीएफ पॉपअप नियंत्रण वास्तव में एक अलग खिड़की है। यह अच्छा है। क्या मुझे धुंध लागू करने के लिए पॉपअप का हैंडल मिल सकता है? यदि हां, तो कैसे?

उत्तर

8

इस

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

या इस प्रयास करें, लेकिन यह एक ही वास्तविक विंडोज के लिए काम करता है, लेकिन भविष्य में संदर्भ के लिए मदद कर सकता है।

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

आप '' myPopup.Child' HwndSource.FromVisual को पारित करना चाहिए() 'Cleber के जवाब में के रूप में। अन्यथा आपको पॉपअप के माता-पिता के एचडब्ल्यूडसोर्स मिलते हैं (जो आपकी मूल विंडो है, जहां एक्सएएमएल में पॉपअप घोषित किया गया था)। लेकिन अगर आप 'myPopup.Child' पास करते हैं तो आपको पॉपअप द्वारा बनाई गई विंडो मिल जाएगी। – nevermind

0

क्या इसका कस्टम क्लास नाम है? यदि ऐसा है, तो आप कक्षा के नाम (FindWindow) के माध्यम से विंडो हैंडल पा सकते हैं।

जब मैं विंडोज़ में इस सामान की बात करता हूं तो मैं एक हैकर-प्रकार का थोड़ा सा हूं, इसलिए मैं आमतौर पर "उचित" विधि खोजने की कोशिश करने के बजाय पहले कोशिश करता हूं। मेरे लिए सभी पुरानी चीजें, हालांकि, मैं अब और अधिक नहीं करता - blackbeltvb.com

दो अन्य तरीकों से मैंने यह किया है 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; 
संबंधित मुद्दे