2009-04-19 10 views
7

मैं इन मूल्यों के साथ एक खिड़की है:एक खिड़की की पृष्ठभूमि के अंदर एक पारदर्शी छेद बनाएं WPF

WindowState="Maximized" 
AllowsTransparency="True" 
Opacity="0.5" 
WindowStyle="None" 

इस विंडो अन्य विंडो के शीर्ष पर (एक पॉप-अप के रूप में) की सामग्री के साथ उस पर एक पर आ रहा है विशिष्ट स्थान।

मेरे पास एक नई आवश्यकता है। इस विंडो को नीचे की खिड़की से एक आयताकार क्षेत्र दिखाना है। दूसरे शब्दों में, मुझे इस विंडो में "छेद" सेट करना होगा जो पूरी तरह से पारदर्शी होगा (अस्पष्टता मूल्य के बिना)। इस पल तक मैं इस पारदर्शी छेद को बनाने का कोई तरीका नहीं समझ सका।

आशा एक विचार प्राप्त करने के लिए ...

उत्तर

3

कोशिश से बचने के लिए AllowsTransparency = सच है, यह बहुत ही गाड़ी और धीमी है। एक बार खिड़की बाउंडिंग आयत के लिए और एक बार छेद के लिए

  1. उपयोग CreateRectRgn दो बार,:

    आप PInvoke SetWindowRgn किसी भी आकार की एक विंडो बनाने में कर सकते हैं।

  2. RGN_AND साथ
  3. उपयोग CombineRgn 4 पैरामीटर यह
  4. कॉल SetWindowRgn में एक छेद के साथ एक क्षेत्र पाने के लिए खिड़की
  5. एक तुम पारित कर दिया को छोड़कर सभी क्षेत्रों को नष्ट करने के लिए मत भूलना के क्षेत्र पर लागू करने के रूप में SetWindowRgn को
+0

अपने जवाब के लिए धन्यवाद, मैं इसे थोड़ा असंभव इसके अंदर एक छेद के साथ एक खिड़की क्षेत्र बनाने के लिए मिल गया है ... या आप शायद ऐसा करने का एक तरीका पता है? – Satumba

+0

मैंने छेद वाले क्षेत्र को बनाने के तरीके के बारे में निर्देश जोड़े हैं। – Nir

+0

धन्यवाद दोस्त, हालांकि मैंने अपने समाधान का उपयोग करने का फैसला किया, मैंने आपके सुझाव को उत्तर के रूप में चिह्नित किया। – Satumba

9

मैं इसके लिए समाधान का एक प्रकार पाया:

इस पॉप-अप विंडो है कि एक और खिड़की के शीर्ष, और एक वांछित जगह में अन्य विंडो के लिए एक छेद युक्त पर:

खिड़की के हेडर:

WindowState="Maximized" 
    AllowsTransparency="True" 
    WindowStyle="None" 

विंडो की सामग्री:

<Window.Background > 
    <SolidColorBrush x:Name="BackgroundBrush" Color="WhiteSmoke" Opacity="0" ></SolidColorBrush> 
</Window.Background> 
<Canvas x:Name="ContectHolder" > 
    <Path Stroke="Black" Fill="WhiteSmoke" Opacity="0.8"> 
     <Path.Data> 
      <CombinedGeometry GeometryCombineMode="Exclude"> 
       <CombinedGeometry.Geometry1 > 
        <RectangleGeometry Rect="0,0,2000,2000" /> 
       </CombinedGeometry.Geometry1> 
       <CombinedGeometry.Geometry2> 
        <RectangleGeometry Rect="75,75,400,900" /> 
       </CombinedGeometry.Geometry2> 
      </CombinedGeometry> 
     </Path.Data> 
    </Path> 
</Canvas> 
संबंधित मुद्दे