是否可以在一个GeometryDrawing
内使用多个画笔?我想用不同的画笔绘制几个几何图形,并且必须为每个画面声明一个单独的GeometryDrawing
相当冗长。我正在寻找一种更简洁的方式来表达以下内容:
<DrawingImage x:Key="SomeDrawingImage">
<DrawingImage.Drawing>
<DrawingGroup>
<GeometryDrawing Brush="{StaticResource SomeGradient}">
<GeometryDrawing.Geometry>
<PathGeometry Figures="{StaticResource SomeFigures}">
<PathGeometry.Transform>
<TransformGroup>
<TranslateTransform X="50" />
</TransformGroup>
</PathGeometry.Transform>
</PathGeometry>
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing Brush="{StaticResource SomeOtherGradient}">
<GeometryDrawing.Geometry>
<PathGeometry Figures="{StaticResource SomeOtherFigures}">
<PathGeometry.Transform>
<TransformGroup>
<TranslateTransform X="100" />
</TransformGroup>
</PathGeometry.Transform>
</PathGeometry>
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
答案 0 :(得分:4)
据我了解你的问题,我会说 在一个GeometryDrawing 中不可能有多个画笔。
GeometryDrawing的全部目的是将笔划(使用Pen属性)和填充(使用Brush属性)...与几何(使用Geometry属性)组合。
为了让我们的xaml更简洁,我们自己不仅分享了画笔(这是常见的)而且还分享了几何图形...但是你的xaml建议你也这样做。
答案 1 :(得分:1)
你可以在
背后的代码中做到这一点var source = image.Source as DrawingImage;
var drawing = source.Drawing as DrawingGroup;
foreach (GeometryDrawing geometryDrawing in drawing.Children)
{
geometryDrawing.Brush = Brushes.Brown;
}
答案 2 :(得分:0)
使用GeometryDrawing时,您始终可以覆盖画笔的资源:
<Image Source="{StaticResource SomeDrawingImage}">
<Image.Resources>
<SolidColorBrush x:Key="SomeGradient" Color="Brown" />
<SolidColorBrush x:Key="SomeOtherGradient" Color="Yellow" />
</Image.Resources>
</Image>
答案 3 :(得分:0)
您可以使用可视化刷来实现
<Grid.Background>
<VisualBrush>
<VisualBrush.Visual>
<Grid
Width="{Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type FrameworkElement}}, Mode=OneWay}"
Height="{Binding Path=ActualHeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type FrameworkElement}}, Mode=OneWay}">
<Rectangle Fill="Blue" />
<Image Source="your image path" Stretch="Uniform" />
</Grid>
</VisualBrush.Visual>
</VisualBrush>
</Grid.Background>