Pregunta

¿Es posible utilizar varios cepillos dentro de un solo GeometryDrawing ? Tengo varias geometrías que quiero dibujar con diferentes pinceles, y es bastante detallado a tener que declarar un GeometryDrawing individual para cada uno. Estoy buscando una manera más concisa para expresar lo siguiente:

<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>
¿Fue útil?

Solución

En la medida de lo entiendo su pregunta, yo diría no es posible tener varios cepillos dentro de un solo GeometryDrawing .

Todo el propósito de un GeometryDrawing es la combinación de un accidente cerebrovascular (con la propiedad Pen) y un relleno (con la propiedad del cepillo) ... con una geometría (con la propiedad geometría).

Para hacer nuestra xaml más concisa, nosotros mismos hemos compartido no sólo los cepillos (que es común), sino también la geometría ... pero tu xaml sugiere que usted está haciendo lo mismo.

Otros consejos

se puede hacer eso en código detrás

var source = image.Source as DrawingImage;
var drawing = source.Drawing as DrawingGroup;
foreach (GeometryDrawing geometryDrawing in drawing.Children)
{
    geometryDrawing.Brush = Brushes.Brown;
}

Siempre se puede sobrescribir los recursos de los cepillos cuando se utiliza el GeometryDrawing:

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

Puede utilizar un VisualBrush para lograr ese

 <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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top