WPF ControlTemplate по сравнению с UserControl

Я могу рекомендовать плагин EnhCommentify.

, например, помещенный это в Ваш vimrc:

let maplocalleader=','
vmap  c VisualTraditional
nmap  c Traditional
let g:EnhCommentifyBindInInsert = 'No'
let g:EnhCommentifyMultiPartBlocks = 'Yes'
let g:EnhCommentifyPretty = 'Yes'
let g:EnhCommentifyRespectIndent = 'Yes'
let g:EnhCommentifyUseBlockIndent = 'Yes'

можно тогда комментировать/не комментировать (выбранные) строки с', c'

40
задан Kenan E. K. 15 July 2009 в 13:28
поделиться

2 ответа

Здесь необходимо рассмотреть три случая: UserControl, ControlTemplate и custom Control. (Я предполагаю, что шаблон DataTemplate не нуждается в объяснении)

Пользовательский элемент управления - это то, что вы предоставляете при создании базовой функциональности нового компонента пользовательского интерфейса. У этого есть различные плюсы и минусы, но, например, если вам нужно настраиваемое поведение выбора для ItemsControl, лучше всего сделать это, создав подкласс Selector или MultiSelector (это делает wpftoolkit DataGrid). Кроме того, если вам нужен объект, который будет содержать новое свойство DependencyProperty, вы в большинстве случаев будете производным от Control.

Принцип wpf, содержащийся здесь, - это парадигма «незаметного» элемента управления, или «обязательно ожидайте, что кто-то создаст шаблон для вашего элемента управления, или, по крайней мере, заставить его вести себя хорошо в вашем собственном сценарии шаблона " . Пользовательские элементы управления обычно создаются с учетом возможности их повторного использования, часто как части библиотек DLL фреймворка.

ControlTemplate по сути является описанием замещающего визуального дерева и может быть установлен либо явно в элементах FrameworkElements, либо в виде часть стиля. Это вариант, к которому вы должны стремиться, когда ваша цель - в первую очередь создать приложение и покончить с ним. С помощью ControlTemplate визуально можно делать практически все, что угодно, если вы можете правильно получить привязки и триггеры (и, возможно, сам стиль). Все это можно объявить как ресурс, который можно использовать повторно, чтобы дать вашему приложению общую «тему».

A UserControl - это автономный составной элемент управления, части которого редактируются индивидуально в дизайнере, и лучше всего использовать, если вам нужно видеть свои компоненты и управлять ими в дизайнере. ControlTemplate, с другой стороны, не будет открывать свои компоненты для манипуляции в дизайнере (хотя это будет видно). Обычно вы создаете UserControl для страницы сведений о клиенте или браузера для отображения продукта или в любом случае, когда вы не хотите создавать полноценный элемент управления, но хотите подробное представление с полной поддержкой дизайнера.

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

(Для получения дополнительной информации о MVVM, среди многих других, Google для Джоша Смита, Саши Барбер и фантастические статьи Карла Шиффлетта)

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

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

(Для получения дополнительной информации о MVVM, среди многих других, Google для Джоша Смита, Саши Барбер и фантастические статьи Карла Шиффлетта)

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

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

(Для получения дополнительной информации о MVVM, среди многих других, Google для Джоша Смита, Саши Барбер и фантастические статьи Карла Шиффлетта)

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

Особый случай здесь - использование MVVM шаблон. Многие отличные реализации MVVM используют UserControls как представления, а ControlTemplates и стили как ресурсы, используемые этими представлениями. Практика MVVM также сводит к минимуму необходимость в настраиваемом элементе управления и имеет много других преимуществ.

(Для получения дополнительной информации о MVVM, среди многих других, Google для Джоша Смита, Саши Барбер и фантастические статьи Карла Шиффлетта)

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

Особый случай здесь - использование MVVM шаблон. Многие отличные реализации MVVM используют UserControls как представления, а ControlTemplates и стили как ресурсы, используемые этими представлениями. Практика MVVM также сводит к минимуму необходимость в настраиваемом элементе управления и имеет много других преимуществ.

(Для получения дополнительной информации о MVVM, среди многих других, Google для Джоша Смита, Саши Барбер и фантастические статьи Карла Шиффлетта)

Многие отличные реализации MVVM используют UserControls как представления, а ControlTemplates и стили как ресурсы, используемые этими представлениями. Практика MVVM также сводит к минимуму потребность в настраиваемом элементе управления и имеет много других преимуществ.

(Для получения дополнительной информации о MVVM, среди многих других, Google для Джоша Смита, Саши Барбер и фантастические статьи Карла Шиффлетта)

Многие отличные реализации MVVM используют UserControls как представления, а ControlTemplates и стили как ресурсы, используемые этими представлениями. Практика MVVM также сводит к минимуму потребность в настраиваемом элементе управления и имеет много других преимуществ.

(Для получения дополнительной информации о MVVM, среди многих других, Google для Джоша Смита, Саши Барбер и фантастические статьи Карла Шиффлетта)

58
ответ дан 27 November 2019 в 01:45
поделиться

If you are adding your own dependency properties, then you will need your own class upon which to define them.

As you want to apply a template to the class, this custom class will have to derive from Control (as UserControl does).

The main benefit of writing your own Control-derived class is that it can have its template redefined for other usage scenarios, either by you within the app, or by other users of the type.

There is very little overhead in using the UserControl class. In fact, if you look at it in Reflector.NET, you'll see that it hardly has any code. Primarily, UserControl just redefines the metadata on some existing dependency properties (such as making the default value of FocusableProperty false.)

Unless you need to redefine the template of the control immediately, you can leave it as a UserControl for now and change it later if needed.

3
ответ дан 27 November 2019 в 01:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: