WPF: Почему я не должен использовать {Поле TemplateBinding} в ControlTemplate - Поле предназначено только для контейнеров элемента?

Я создал свой собственный ControlTemplate для Кнопки, как это:


Теперь, я заметил это, когда я установил поле на свою кнопку, как:


кнопка имеет на самом деле двойное Поле - 40. Я предположил, что управление никогда не должно, на самом деле, использовать Поле, и что свойство Margin только для чтения предками кнопки во время фазы расположения. Я затем изучил стили по умолчанию WPF и узнал что никакой из тех используемое Поле.

Действительно ли это - правильное заключение (что Поле сознает ситуацию только, чтобы быть правильно расположенным контейнерами)? Другими словами, каждый раз, когда я использую {Поле TemplateBinding} в моем стиле, я получу двойные поля вместо этого? И есть ли некоторый список подобных свойств, которые мое управление не должно использовать (поскольку они предназначены только для 'окружающего мира' только)?

Вы указали бы на меня на страницу MSDN, которая объясняет это?Спасибо!

Править:

Я предполагаю, что должен найти ответы в http://msdn.microsoft.com/en-us/library/ms745058.aspx и http://msdn.microsoft.com/en-us/library/ms751709.aspx, но я не думаю, что они упомянули явно, что это никогда не управление, кто использует свойство Margin, что это всегда - предок или wpf система, кто evalues это и использует его для влияния на расположение...

9
задан Tomáš Kafka 5 January 2010 в 15:19
поделиться

2 ответа

Ваше заключение верно, если вы посмотрите на фреймворк, предоставляемый шаблонами по умолчанию, вы увидите, что Margin внутри шаблона привязан к свойству Padding control.

.
6
ответ дан 4 December 2019 в 20:24
поделиться

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

<Border x:Name="WrappingBorder" Margin="{TemplateBinding Padding}" ... />
5
ответ дан 4 December 2019 в 20:24
поделиться
Другие вопросы по тегам:

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