Облегченная шаблонная форма WPF

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

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


person MrTelly    schedule 19.02.2009    source источник
comment
У вас это сработало? Можете ли вы дать какие-либо подробности о ваших результатах?   -  person Drew Noakes    schedule 24.02.2009


Ответы (1)


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

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

UserControl
    ContentControl
        Control
            FrameworkElement
                UIElement
                    Visual
                        ...

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

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

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

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

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

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

Shape
    FrameworkElement
        UIElement
            Visual
                ...

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

ИЗМЕНИТЬ Вы можете проверить DrawingVisual. Из MSDN:

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

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

person Drew Noakes    schedule 19.02.2009