Я создал свой собственный 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 это и использует его для влияния на расположение...
Ваше заключение верно, если вы посмотрите на фреймворк, предоставляемый шаблонами по умолчанию, вы увидите, что Margin
внутри шаблона привязан к свойству Padding
control.
Поле применяется автоматически системой макета, внутри шаблона элемента управления вместо него следует использовать Padding.
<Border x:Name="WrappingBorder" Margin="{TemplateBinding Padding}" ... />