//I am not sure why this works but it fixes the problem.
Этот стоит первым в списке для моих бесполезных комментариев.
Это должно работать в случае, когда вы создаете шаблон элемента управления и хотите связать значение свойства этого элемента управления со свойством другого элемента управления внутри шаблона. В вашем случае вы создаете шаблон (назовем его MyControl), и этот шаблон будет включать border, Padding которого должен быть связан с padding MyControl.
TemplateBinding - это оптимизированная форма Binding для шаблонных сценариев, аналогичная Binding, построенной с помощью {Binding RelativeSource={RelativeSource TemplatedParent}}.
По какой-то причине указание TemplatedParent в качестве источника для привязки не работает в установщиках стилей. Чтобы обойти это, вы можете указать относительного родителя как AncestorType элемента управления, который вы шаблонируете (что эффективно находит TemplatedParent, если вы не внедрили другие MyControls в шаблон MyControl).
Я использовал это решение, когда пытался создать шаблон элемента управления Button, в котором содержимое (String) Button должно было быть связано со свойством Text блока TextBlock в шаблоне ControlTemplate для кнопки. Вот как выглядел этот код:
<StackPanel>
<StackPanel.Resources>
<ControlTemplate x:Key="BarButton" TargetType="{x:Type Button}">
<ControlTemplate.Resources>
<Style TargetType="TextBlock" x:Key="ButtonLabel">
<Setter Property="Text" Value="{Binding Path=Content, RelativeSource={RelativeSource AncestorType={x:Type Button}} }" />
</Style>
</ControlTemplate.Resources>
<Grid>
<!-- Other controls here -->
<TextBlock Name="LabelText" Style="{StaticResource ButtonLabel}" />
</Grid>
</ControlTemplate>
</StackPanel.Resources>
<Button Width="100" Content="Label Text Here" Template="{StaticResource BarButton}" />
</StackPanel>
Свойство можно квалифицировать, просто поставив перед ним префикс с именем типа. Например, Border.Padding
вместо Padding
.
Однако я не уверен, что это имеет смысл для вашего сценария. TemplateBinding
используются внутри шаблона управления.