Ответ 1
TemplatedParent
относится к экземпляру Control
, к которому применяется шаблон. Вы можете использовать TemplatedParent
для привязки к свойствам, объявленным на этом объекте (и его базовым классам).
Я пытаюсь понять привязку RelativeSource, но я не могу найти определение для TemplatedParent. MSDN говорит:
"Получает статическое значение, которое используется для возврата источника RelativeSource, созданного для режима TemplatedParent."
Он не отображается в индексе "Windows Presentation Foundation Unleashed".
Просто, что такое TemplatedParent, пожалуйста?
TemplatedParent
относится к экземпляру Control
, к которому применяется шаблон. Вы можете использовать TemplatedParent
для привязки к свойствам, объявленным на этом объекте (и его базовым классам).
TemplatedParent
Этот режим позволяет привязать данное свойство ControlTemplate к свойству элемента управления, к которому применяется ControlTemplate. Чтобы хорошо понять проблему, здесь приведен пример ниже.
<Window.Resources>
<ControlTemplate x:Key="template">
<Canvas>
<Canvas.RenderTransform>
<RotateTransform Angle="20"/>
</Canvas.RenderTransform>
<Ellipse Height="100" Width="150"
Fill="{Binding
RelativeSource={RelativeSource TemplatedParent},
Path=Background}">
</Ellipse>
<ContentPresenter Margin="35"
Content="{Binding RelativeSource={RelativeSource
TemplatedParent},Path=Content}"/>
</Canvas>
</ControlTemplate>
</Window.Resources>
<Canvas Name="Parent0">
<Button Margin="50"
Template="{StaticResource template}" Height="0"
Canvas.Left="0" Canvas.Top="0" Width="0">
<TextBlock FontSize="22">Click me</TextBlock>
</Button>
</Canvas>
Если я хочу применить свойства данного элемента управления к его шаблону управления, я могу использовать режим TemplatedParent. Существует также аналогичное расширение этой разметки, которое является TemplateBinding, которое является своего рода короткой рукой первого, но TemplateBinding оценивается во время компиляции на контрасте TemplatedParent, который оценивается сразу после первого времени выполнения. Как вы можете заметить на приведенном ниже рисунке, фон и содержимое применяются от кнопки к шаблону управления.
В WPF шаблон используется для построения дерева типа. WPF по существу делает копию шаблона при создании нового объекта этого типа.
В результате внутри шаблона, если вы хотите обратиться к новому объекту, вы используете TemplatedParent
для быстрого доступа. В противном случае вам нужно будет использовать RelativeSource
, чтобы пройти дерево вверх, чтобы найти родительский объект.