Как можно повторно использовать DrawingImage XAML, изменяя только сегменты PathGeometry LineSegments? - PullRequest
2 голосов
/ 09 февраля 2011

В моем приложении WPF есть три кнопки, которые я хочу отобразить в виде изображения треугольника.Я не использую класс Shape, потому что он слишком тяжелый для моих нужд, поэтому вместо него я использую DrawingImage.Вот разметка для моего изображения (я бы опубликовал чистое изображение, но пока не могу, поскольку я новичок):

<Image>
    <Image.Source>
        <DrawingImage>
            <DrawingImage.Drawing>
                <GeometryDrawing Brush="LawnGreen">
                    <GeometryDrawing.Pen>
                        <Pen Brush="Black" Thickness="1" />
                    </GeometryDrawing.Pen>
                    <GeometryDrawing.Geometry>
                        <PathGeometry>
                            <PathFigure   IsClosed="True">
                                <LineSegment Point="-10, 20" />
                                <LineSegment Point="30, 20" />
                            </PathFigure>
                        </PathGeometry>
                    </GeometryDrawing.Geometry>
                </GeometryDrawing>
            </DrawingImage.Drawing>
        </DrawingImage>
    </Image.Source>
</Image>

Это изображение для первой кнопки - разностороннеетреугольник с его вершиной слева.XAML двух других кнопок почти идентичны - единственное изменение заключается в том, что точки сегмента линии будут немного отличаться от пика в середине и справа от их осей, соответственно.

Как я могу сделать одно объявление для моего изображения.Source-> DrawingImage, как указано выше, только без определенных координат сегмента линии, а затем выполнить что-то вроде

<Button>  
    <Image Source="MyGenericDrawingImage">  
        <!--*Fill in the PathGeometry>PathFigure> LineSegment coordinates for each button-->  
    </Image>  
</Button>

Это выглядело бы намного чище, чем при сбросе блоков почти идентичного кода рядом друг с другом.

Ответы [ 2 ]

2 голосов
/ 30 сентября 2011

Я знаю, что это старый, но вот решение, которое я использовал. Я установил геометрию пути как ресурс и назвал ее стилем (отлично подходит для повторного использования). Чтобы стрелка указывала в сторону, снова используйте тот же значок и поверните его на 90 градусов.

enter image description here

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:sys="clr-namespace:System;assembly=mscorlib">

<Page.Resources>
  <sys:String x:Key="Icon_ArrowDown">
          F1 M 4.439,0.000 L 2.219,3.112 L 0.000,0.000 L 4.439,0.000 Z
      </sys:String>
</Page.Resources>

<StackPanel> 

<Button>
   <Path Data="{StaticResource  Icon_ArrowDown}" Fill="Red" />
</Button>

<Button>
    <Path Data="{StaticResource Icon_ArrowDown}" Fill="Red" />
        <Path.RenderTransform>
            <CompositeTransform Rotation="-90"/>
        </Path.RenderTransform>
    </Path>
</Button>

</StackPanel>
</Page>
0 голосов
/ 30 сентября 2011

Если у вас нет абсолютно симметричной, масштабированной, повернутой геометрии (и т. Д.), Вам придется прибегнуть к какой-либо модификации данных, чтобы избежать их "повторения".Это действительно другая геометрия, если она не является конгруэнтной.

Тем не менее, вы можете редактировать данные в коде и использовать привязку данных для получения отредактированных значений.

Вот некоторыеинформация о том, как данные привязывают путь к геометрии, указанной в модели представления:

Рисование контура и привязка данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...