在WPF中的单个几何图形中使用多个笔刷
是否可以在一个区域内使用多个笔刷?我有几个几何图形,我想用不同的画笔来绘制,每个几何图形都要声明一个单独的在WPF中的单个几何图形中使用多个笔刷,wpf,xaml,brushes,geometrydrawing,Wpf,Xaml,Brushes,Geometrydrawing,是否可以在一个区域内使用多个笔刷?我有几个几何图形,我想用不同的画笔来绘制,每个几何图形都要声明一个单独的GeometryDrawing。我正在寻找一种更简洁的方式来表达以下内容: <DrawingImage x:Key="SomeDrawingImage"> <DrawingImage.Drawing> <DrawingGroup> <GeometryDrawing Brush="{StaticResou
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>
您可以在代码隐藏中执行此操作
var source = image.Source as DrawingImage;
var drawing = source.Drawing as DrawingGroup;
foreach (GeometryDrawing geometryDrawing in drawing.Children)
{
geometryDrawing.Brush = Brushes.Brown;
}
使用几何图形绘制时,始终可以覆盖笔刷的资源:
<Image Source="{StaticResource SomeDrawingImage}">
<Image.Resources>
<SolidColorBrush x:Key="SomeGradient" Color="Brown" />
<SolidColorBrush x:Key="SomeOtherGradient" Color="Yellow" />
</Image.Resources>
</Image>
就我理解你的问题而言,我想说在一个几何图形中不可能有多个笔刷 几何体绘制的全部目的是将笔划(具有画笔属性)和填充(具有画笔属性)结合起来。。。具有几何图形(具有几何图形特性)
为了使我们的xaml更加简洁,我们自己不仅共享了画笔(这是常见的),而且还共享了几何体。。。但是您的xaml表明您也在这样做。您可以使用visualbrush来实现这一点
<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>
虽然我确信我可以以某种方式应用代码隐藏,但我更喜欢仅使用XAML的解决方案。为了获得更好的方法,您可以在XAML中使用DynamicSource而不是StaticResource,并从codebehind更新资源。您至少需要使用这么多代码。