目前,我正在用略透明的黑色填充MainWindow: 但我希望它有一个不会出现这种影响的“洞”,该洞应如下所示: 因此,这需要在运行时完成,因为在程序运行时,孔所代表的区域将多次更改。
所以起初我以为我可以将中间的区域切开 就像您可以使用Graphics对象一样,但是稍微 透明黑色不过是一个矩形,它作为子级添加到了画布上,当前是这样完成的:
var background = new System.Windows.Shapes.Rectangle
{
Fill = new SolidColorBrush(System.Windows.Media.Color.FromArgb(150, 0, 0, 0)),
Width = ScreenInfo.Width,
Height = ScreenInfo.Height
};
MainCanvas.Children.Add(background);
但是我无法以任何方式实现这种剪切效果。
感谢您的任何帮助!
答案 0 :(得分:1)
通过从较大的正方形中切出较小的正方形,然后将其与路径一起使用来创建CombinedGeometry。如何调整大小取决于您的应用程序,对于大多数情况,Viewbox可能就足够了:
<Grid>
<TextBlock Text="Hello World!" FontSize="200" Foreground="Red" TextWrapping="Wrap" TextAlignment="Center"/>
<Viewbox Stretch="UniformToFill">
<Path Fill="#C0000000">
<Path.Data>
<CombinedGeometry GeometryCombineMode="Exclude">
<CombinedGeometry.Geometry1>
<RectangleGeometry Rect="0,0,4,4" />
</CombinedGeometry.Geometry1>
<CombinedGeometry.Geometry2>
<RectangleGeometry x:Name="cutRect" Rect="1,1,2,2" />
</CombinedGeometry.Geometry2>
</CombinedGeometry>
</Path.Data>
</Path>
</Viewbox>
</Grid>
然后,要更改内部几何图形的大小,可以将其Rect绑定到视图模型属性,也可以直接在代码隐藏中更改它:
cutRect.Rect = new Rect(1, 1, 1, 1);