我试图以透明的方式创建DrawingBrush,但是我想不出如何设置这个透明性:(以下是XAML:
<Border Grid.Column="1" Grid.Row="1" BorderBrush="Yellow" Background="Green">
<Rectangle>
<Rectangle.Fill>
<DrawingBrush>
<DrawingBrush.Drawing>
<DrawingGroup>
<GeometryDrawing Brush="Red">
<GeometryDrawing.Geometry>
<CombinedGeometry GeometryCombineMode="Exclude">
<CombinedGeometry.Geometry1>
<RectangleGeometry Rect="0, 0, 110, 110" />
</CombinedGeometry.Geometry1>
<CombinedGeometry.Geometry2>
<RectangleGeometry Rect="10, 10, 90, 90" />
</CombinedGeometry.Geometry2>
</CombinedGeometry>
</GeometryDrawing.Geometry>
<GeometryDrawing.Pen>
<Pen Brush="Blue" Thickness=".3" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
</Rectangle.Fill>
</Rectangle>
</Border>产出如下:

<GeometryDrawing Brush="Red"><Border Background="Green">如何将画笔的背景色设置为Transparent?
如果我在XAML (GeometryDrawing Brush="Transparent")中设置它,则画笔将从上控件Border获得背景色,并且所有内容都将是绿色。
其主要思想是在控制/刷的中间中绘制。
发布于 2015-11-17 20:28:12
从你的评论:
DrawingBrush只在内部矩形中绘制,并将所有“红色”区域设置为透明
WPF中的呈现模型不是这样工作的。在XAML中声明要绘制的内容时,您正在描述要呈现的对象的集合。透明的颜色(即alpha值为0,就像内置的Transparent值一样)不会将其下的像素“设置”为透明的;它只是不呈现自身。在对象中使用透明颜色只会显示该对象下面的任何内容。
如果要在边框内绘制由透明像素构成的绿色框,则根本不需要填充边框(因为这将通过透明像素显示),还需要定义一个Drawing,它可以绘制您想要的内容。即透明矩形,用于定义所需矩形的实际范围,然后在该矩形内定义一个较小的填充矩形。
例如:
<Window x:Class="TestSO33761293InsetRectangleBorder.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="525" Width="525">
<Window.Resources>
<DrawingBrush x:Key="drawingBrush1">
<DrawingBrush.Drawing>
<DrawingGroup>
<GeometryDrawing Brush="Green">
<GeometryDrawing.Geometry>
<RectangleGeometry Rect="10, 10, 90, 90" />
</GeometryDrawing.Geometry>
<GeometryDrawing.Pen>
<Pen Brush="Blue" Thickness=".3" />
</GeometryDrawing.Pen>
</GeometryDrawing>
<GeometryDrawing Brush="Transparent">
<GeometryDrawing.Geometry>
<RectangleGeometry Rect="0, 0, 110, 110" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="2*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="1" Grid.Row="1" BorderBrush="Yellow" BorderThickness="1">
<Rectangle Fill="{StaticResource drawingBrush1}"/>
</Border>
</Grid>
</Window>https://stackoverflow.com/questions/33761293
复制相似问题