在WPF中的单个GeometryDrawing中使用多个画笔

时间:2009-12-22 14:46:05

标签: wpf xaml brushes geometrydrawing

是否可以在一个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>

4 个答案:

答案 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>