3

1 つのブラシで複数のブラシを使用することはでき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

それを達成するために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>
于 2016-12-20T10:48:54.847 に答える