在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更新资源。您至少需要使用这么多代码。