В пользовательском элементе управления WPF как указать координаты относительно общего размера элемента управления, чтобы он правильно масштабировался? - PullRequest
3 голосов
/ 15 июля 2010

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

Пользовательский элемент управления кнопкой расширения http://i31.tinypic.com/1zxqtyx.jpg

Я разработал элемент с 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! -->

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

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

1 Ответ

2 голосов
/ 15 июля 2010

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

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

...