質問

シングル<のhref =「http://msdn.microsoft.com/en-us/library/system.windows.media.geometrydrawing.aspx」のrel =「nofollowをnoreferrer」内で複数のブラシを使用することが可能です> 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>
役に立ちましたか?

解決

私の知る限り、あなたの質問を理解して、私が言うでの のそれは、単一のGeometryDrawing内に複数のブラシを持ってすることはできません。の。

GeometryDrawingの全体の目的は、(ジオメトリプロパティを持つ)ジオメトリと...(ペンプロパティを持つ)ストロークと(ブラシプロパティで)塗りつぶしを組み合わせることである。

私たちのXAMLをより簡潔にするために、私たち自身が(一般的です)、ブラシだけではないの共有だけでなく、ジオメトリ...しかし、あなたのXAMLはあなたが同じことをやっていることを示唆しているしている。

他のヒント

は、

の後ろにコードでそれを行うことができます
var source = image.Source as DrawingImage;
var drawing = source.Drawing as DrawingGroup;
foreach (GeometryDrawing geometryDrawing in drawing.Children)
{
    geometryDrawing.Brush = Brushes.Brown;
}

あなたはGeometryDrawingを使用するときは、必ずブラシのリソースを上書きすることができます:

<Image Source="{StaticResource SomeDrawingImage}">
    <Image.Resources>
        <SolidColorBrush x:Key="SomeGradient" Color="Brown" />
        <SolidColorBrush x:Key="SomeOtherGradient" Color="Yellow" />
    </Image.Resources>
</Image>

あなたはそれを達成するた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>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top