3

是否可以在单个中使用多个画笔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

4 回答 4

4

据我了解您的问题,我想说在一个 GeometryDrawing 中不可能有多个画笔

GeometryDrawing 的全部目的是将笔触(使用 Pen 属性)和填充(使用 Brush 属性)...与几何体(使用 Geometry 属性)结合起来。

为了使我们的 xaml 更加简洁,我们自己不仅共享了画笔(这很常见)而且还共享了几何图形……但是您的 xaml 表明您正在做同样的事情。

于 2009-12-22T19:14:20.170 回答
1

你可以在后面的代码中做到这一点

var source = image.Source as DrawingImage;
var drawing = source.Drawing as DrawingGroup;
foreach (GeometryDrawing geometryDrawing in drawing.Children)
{
    geometryDrawing.Brush = Brushes.Brown;
}
于 2009-12-22T15:46:34.803 回答
0

使用 GeometryDrawing 时,您始终可以覆盖画笔的资源:

<Image Source="{StaticResource SomeDrawingImage}">
    <Image.Resources>
        <SolidColorBrush x:Key="SomeGradient" Color="Brown" />
        <SolidColorBrush x:Key="SomeOtherGradient" Color="Yellow" />
    </Image.Resources>
</Image>
于 2009-12-22T16:34:03.027 回答
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>
于 2016-12-20T10:48:54.847 回答