Использование нескольких кистей в одном GeometryDrawing в WPF - PullRequest
3 голосов
/ 22 декабря 2009

Можно ли использовать несколько кистей в одной 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 голосов
/ 22 декабря 2009

Насколько я понимаю ваш вопрос, я бы сказал, , невозможно иметь несколько кистей в одном GeometryDrawing .

Целью GeometryDrawing является объединение обводки (со свойством Pen) и заливки (со свойством Brush) ... с геометрией (со свойством Geometry).

Чтобы сделать наш xaml более кратким, мы сами поделились не только кистями (что часто встречается), но и геометрией ... но ваш xaml предполагает, что вы делаете то же самое.

1 голос
/ 22 декабря 2009

вы можете сделать это в коде

var source = image.Source as DrawingImage;
var drawing = source.Drawing as DrawingGroup;
foreach (GeometryDrawing geometryDrawing in drawing.Children)
{
    geometryDrawing.Brush = Brushes.Brown;
}
0 голосов
/ 20 декабря 2016

Вы можете использовать визуальную кисть для достижения этого

 <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>
0 голосов
/ 22 декабря 2009

Вы всегда можете перезаписать ресурсы кистей при использовании GeometryDrawing:

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