2009-04-19 3 views
7

У меня есть окно с этими значениями:Создать прозрачное отверстие внутри фона окна - WPF

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

Это окно подходит поверх другого окна (как всплывающее окно) с содержанием на нем на конкретное место.

У меня есть новое требование. Это окно должно отображать прямоугольную область из окна ниже. Другими словами, я должен установить «отверстие» в этом окне, которое будет полностью прозрачным (без значения непрозрачности). До этого момента я не мог понять, как сделать это прозрачное отверстие.

Надежда, чтобы получить представление ...

ответ

3

попытка избежать AllowsTransparency = правда, это очень плохо и медленно.

вы можете PInvoke SetWindowRgn создать окно любой формы:

  1. Используйте CreateRectRgn дважды, один раз для окна, ограничивающего прямоугольника и один раз для отверстия.
  2. Использование CombineRgn с RGN_AND в качестве 4-го параметра, чтобы получить область с отверстием в нем
  3. вызова SetWindowRgn применить область к окну
  4. Не забудьте удалить все регионы для того, переданных за исключением в 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> 
Смежные вопросы