WPF

2009-04-19 19 views
7

Bu değerlerle bir pencere var:WPF

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

Bu pencere üzerinde üzerinde içerikle (pop-up gibi) diğer pencerenin üstünde geliyor belirli bir yer.

Yeni bir gereksinim var. Bu pencerenin aşağıdaki pencereden bir dikdörtgen alanı göstermesi gerekiyor. Diğer bir deyişle, bu pencerede tamamen şeffaf (opaklık değeri olmadan) bir "delik" ayarlamalıyım. Bu ana kadar, bu şeffaf deliğin yapılmasının bir yolunu anlayamadım. Umut bir fikir edinmek için

...

cevap

3

deneyin AllowsTransparency = true önlemek için, çok arabası ve yavaştır. bir kez pencere sınırlayan dikdörtgen için ve bir kez delik için iki kez

  1. Kullanım CreateRectRgn:

    Eğer PInvoke SetWindowRgn herhangi bir şekildeki bir bir pencere oluşturmak için olabilir.
  2. sen geçirilen bir haricinde tüm bölgeleri silmek unutmayın pencereye bölgeye uygulamak için bu
  3. Çağrı SetWindowRgn bir delik olan bir bölgeyi almak için 4 parametre olarak RGN_AND ile
  4. Kullanım CombineRgn
+0

sayesinde ben biraz imkansız içindeki bir deliği olan bir pencere bölgesini oluşturmak için buldum ... ya da belki sizi Bunu yapmanın bir yolunu biliyor musun? – Satumba

+0

Delikli bir bölge oluşturma hakkında talimatlar ekledim. – Nir

+0

Teşekkürler dostum, çözümümü kullanmaya karar verdim, ancak öneriyi cevap olarak işaretledim. – Satumba

9

SetWindowRgn için bunun için çözelti bir tür bulundu:

bu açılır pencere olduğu bir pencerenin üst ve arzu edilen bir yerde başka bir pencere için bir delik ihtiva eden tarih:

Pencere başlığı:

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

Pencere içerik: Cevabınız için

<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>