Как в пользовательском элементе управления WPF указать координаты относительно общего размера элемента управления, чтобы элемент управления правильно масштабировался?

Я создал этот простой пользовательский элемент управления кнопкой расширения с помощью WPF:

Кнопка расширения пользовательского элемента управления

Я разработал эту штуку с Width и Height, установленными на 100, чтобы я мог видеть, что я на самом деле делаю. Упрощенный XAML этого пользовательского элемента управления:

<UserControl x:Class="Foobar.ExpandButton"
             ...
             Width="100" Height="100">
    ...
    <Border>
        ...
        <Canvas>
            <Line ... X1="20" Y1="20" X2="50" Y2="50"/>
            <Line ... X1="80" Y1="20" X2="50" Y2="50"/>
            <Line ... X1="20" Y1="50" X2="50" Y2="80"/>
            <Line ... X1="80" Y1="50" X2="50" Y2="80"/>
        </Canvas>
    </Border>
</UserControl>

В конце концов, кнопка должна правильно отображаться в разных размерах, например. в 20 × 20 точках. Однако из-за координат, используемых с элементами Line, я не могу просто вставить этот пользовательский элемент управления в другое окно следующим образом:

<foobar:ExpandButton Width="20" Height="20" />  <!-- doesn't scale correctly! -->

Я мог бы применять LayoutTransformScaleTransform каждый раз, когда я использую элемент с размером, отличным от его размера по умолчанию 100 × 100 точек, но должно быть лучшее решение.

Как определить координаты линий так, чтобы они относились к общему размеру пользовательского элемента управления?


person stakx - no longer contributing    schedule 15.07.2010    source источник
comment
См. также: stackoverflow.com/questions/1026476/wpf-canvas-button мне любопытно посмотреть , stakx, какой окончательный xaml вы использовали.   -  person Ian Boyd    schedule 20.06.2011


Ответы (1)


Вы можете поместить изображение в окно просмотра или внутрь VisualBrush и использовать прямоугольник для его рисования (установите кисть в свойство Rectangle.Fill).

Еще лучше преобразовать изображение в объекты Drawing (замените Canvas на DrawingGroup, а фигуры внутри него — на GeometryDrawing) и используйте DrawingBrush для его рисования.

person Nir    schedule 15.07.2010