WPFでの単一GeometryDrawing内で複数のブラシを使用して
-
20-09-2019 - |
質問
シングル<の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>
所属していません StackOverflow