ItemTemplate против ControlTemplate - PullRequest
       5

ItemTemplate против ControlTemplate

5 голосов
/ 22 февраля 2009

Я запутался в изучении WPF. Я вижу ControlTemplate, используемый для определения того, как выглядит каждый элемент в списке. Разве это не то, для чего используется ItemTemplate в списках? В чем разница?

Ответы [ 2 ]

12 голосов
/ 23 февраля 2009

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

Идея состоит в том, что элемент управления содержит только поведение, а шаблон ControlTemplate содержит внешний вид - поэтому кнопка - это «то, что вы нажимаете», а не «прямоугольник с каким-то трехмерным эффектом, на который вы можете нажать».

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

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

И для полноты картины есть также класс ItemsPanelTemplate, который используется для изменения внутренней компоновки списка - в книге Чарльза Петцольда WPF приведен пример его использования, чтобы обычный список отображал элементы по кругу.

3 голосов
/ 22 февраля 2009

ItemTemplate описывает, как отобразить элемент данных в списке (например, ваш список может быть привязан к списку - ItemTemplate позволит вам указать, как отображать Foo). ItemTemplate является DataTemplate.

Шаблон ControlTemplate описывает, как должен отображаться сам ListBox

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