Легкая шаблонная форма WPF - PullRequest
3 голосов
/ 19 февраля 2009

Я использую эллипсы и другие фигуры в качестве экранных маркеров, я хотел бы, чтобы другие могли изменять эти визуальные эффекты с помощью шаблонов. Однако, поскольку форма не поддерживает шаблоны, я вынужден создать базовый UserControl, который по умолчанию показывает эллипс, а затем использовать его вместо базовой формы.

Кто-нибудь получил более аккуратное решение? Меня немного беспокоит, если я создам тысячи таких на экране, производительность / память будут немного перегружены.

1 Ответ

4 голосов
/ 19 февраля 2009

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

Вот разбивка по наследству:

UserControl
    ContentControl
        Control
            FrameworkElement
                UIElement
                    Visual
                        ...

Control определяет свойство Template, поэтому я думаю, что самое легкое средство для достижения того, чего вы хотите - это использовать Control:

<Control Style="{StaticResource MyStyle}"/>

... и используйте Style, чтобы установить шаблон и любые триггеры / и т.д., которые вам нужны.

Если, однако, вам нужно разместить дочерний элемент внутри вашей фигуры, вы должны использовать ContentControl таким образом:

<ContentControl Style="{StaticResource MyStyle}"/>

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

Shape
    FrameworkElement
        UIElement
            Visual
                ...

Shape не наследуется от Control, а напрямую от FrameworkElement. Это не шаблонно. Это абстрактный класс, из которого вам нужно создать свой собственный подкласс, который знает, как описать свою собственную презентацию через свойство DefiningGeometry. Это может быть более сложным, чем определение стиля для Control, но если вам нужна дополнительная производительность, вам, возможно, придется пойти по этому пути.

РЕДАКТИРОВАТЬ Вы также можете проверить DrawingVisual . Из MSDN:

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

Это также не шаблонно, но если вам нужна грубая производительность, то стоит посмотреть.

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