В чем разница между изменением элемента управления путем изменения шаблона элемента управления и добавления дополнительных элементов управления - PullRequest
1 голос
/ 08 июня 2009

Я новичок в WPF и у меня есть сомнения в изменении элемента управления. Я узнал, что можно изменить элемент управления, изменив его Шаблон управления . то есть.,

<Button>
  <Button.Template>
    <ControlTemplate>
      ...
    </ControlTemplate>
  </Button.Template>
</Button>

Также мы можем редактировать элемент управления, используя Модель содержимого . то есть.,

<Button>
  <Grid>
    <CheckBox>
    </CheckBox>
    <RadioButton>
    </RadioButton>
    ...
  </Grid>
</Button>

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

Ответы [ 3 ]

3 голосов
/ 08 июня 2009

Основное различие между этими двумя вещами заключается в том, что ControlTemplate определяет внешний вид элемента управления. Это на самом деле не размещение контента внутри него. В каком-то месте внутри элемента управления контентом должна быть какая-то форма ContentPresenter . Встроенные элементы управления способны на это, потому что они являются так называемыми «элементами без внешнего вида» , и любые созданные пользовательские элементы управления также должны быть без внешнего вида. Когда элемент управления не шаблонизирован без внешнего вида, а вместо этого имеет статическую компоновку, может возникнуть путаница, с которой вы столкнулись.

Что касается правильного способа делать вещи, это зависит от того, чего вы пытаетесь достичь. Если вы пытаетесь изменить элемент управления, такой как внешний вид или поведение, то с использованием ControlTemplate (или DataTemplate, в зависимости от того, что вы используете в качестве шаблона), безусловно, является подходящим вариантом. Хорошим примером этого является CheckBox, верите или нет, CheckBox на самом деле является ToggleButton ( более или менее ), который через через шаблон отображает возможность переключения в пуле. Вот еще один очень хороший пример того, как вы можете использовать шаблоны, чтобы делать очень изящные вещи.

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

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

WPF делает это лучше, чем Silverlight , хотя я не знаю, есть ли улучшения в SL3.

1 голос
/ 08 июня 2009

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

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

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

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

0 голосов
/ 08 июня 2009

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

Изменение содержимого напрямую не может быть использовано повторно, если вы не сделаете из него UserControl.

Какой из них вы используете, зависит от конкретной задачи и ваших личных предпочтений.

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