Создать прозрачную дыру в окне фона - в WPF
У меня есть окно с этими значениями:
WindowState="Maximized"
AllowsTransparency="True"
Opacity="0.5"
WindowStyle="None"
это окно появляется поверх другого окна (как всплывающее) с содержимым на нем в определенном месте.
У меня есть новое требование. Это окно должно показывать прямоугольную область из окна ниже. Другими словами, Я должен установить "отверстие" в этом окне, которое будет полностью прозрачным (без значения непрозрачности). До этого момента я не мог понять, как сделать это прозрачным. отверстие.
надеюсь получить идею...
2 ответов
старайтесь избегать AllowsTransparency=true, это очень глючит и медленно.
вы можете PInvoke SetWindowRgn для создания окна любой формы:
- используйте CreateRectRgn дважды, один раз для окна ограничивающий прямоугольник и один раз для отверстия.
- используйте CombineRgn с RGN_AND в качестве 4-го параметра, чтобы получить область с отверстием в ней
- вызов SetWindowRgn, чтобы применить область к окну
- Не забудьте удалить все регионы, кроме для того, который вы передали 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>