Создать прозрачную дыру в окне фона - в WPF

У меня есть окно с этими значениями:

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

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

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

надеюсь получить идею...

2 ответов


старайтесь избегать AllowsTransparency=true, это очень глючит и медленно.

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

  1. используйте CreateRectRgn дважды, один раз для окна ограничивающий прямоугольник и один раз для отверстия.
  2. используйте CombineRgn с RGN_AND в качестве 4-го параметра, чтобы получить область с отверстием в ней
  3. вызов SetWindowRgn, чтобы применить область к окну
  4. Не забудьте удалить все регионы, кроме для того, который вы передали SetWindowRgn

Я нашел решение для этого:

это всплывающее окно, которое находится поверх другого окна и содержит отверстие для другого окна в нужном месте:

заголовок окна:

    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>