2009-04-19 82 views
7

我有這些價值觀的窗口:窗口的背景中創建一個透明的孔 - WPF

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

這個窗口在其他窗口的頂部到來(如彈出)與內容上它放在具體位置。

我有一個新的要求。該窗口必須在下面的窗口中顯示一個矩形區域。換句話說,我必須在這個窗口中設置一個完全透明的「洞」(沒有不透明度值)。 直到現在我無法想出一種方法來製造這個透明的洞。

希望得到一個想法...

回答

3

儘量避免AllowsTransparency = true,這是非常麻煩和緩慢。

你可以的PInvoke來的SetWindowRgn創建任何形狀的窗口:

  1. 使用CreateRectRgn兩次,一次爲窗口邊框,一次針對洞。
  2. 使用CombineRgn與RGN_AND作爲第四個參數來獲得的區域在它
  3. 呼叫的的SetWindowRgn孔到區域應用到窗口
  4. 不要忘了刪除,除了你通過一個所有地區到的SetWindowRgn
+0

謝謝您的回答, 我發現它有點不可能與裏面的孔創建一個窗口區域...也許你知道一個辦法嗎? – Satumba 2009-04-19 13:28:27

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>