Подтвердить что ты не робот

В WPF, что такое TemplatedParent?

Я пытаюсь понять привязку RelativeSource, но я не могу найти определение для TemplatedParent. MSDN говорит:

"Получает статическое значение, которое используется для возврата источника RelativeSource, созданного для режима TemplatedParent."

Он не отображается в индексе "Windows Presentation Foundation Unleashed".

Просто, что такое TemplatedParent, пожалуйста?

4b9b3361

Ответ 1

TemplatedParent относится к экземпляру Control, к которому применяется шаблон. Вы можете использовать TemplatedParent для привязки к свойствам, объявленным на этом объекте (и его базовым классам).

Ответ 2

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, который оценивается сразу после первого времени выполнения. Как вы можете заметить на приведенном ниже рисунке, фон и содержимое применяются от кнопки к шаблону управления.

Ответ 3

В WPF шаблон используется для построения дерева типа. WPF по существу делает копию шаблона при создании нового объекта этого типа.

В результате внутри шаблона, если вы хотите обратиться к новому объекту, вы используете TemplatedParent для быстрого доступа. В противном случае вам нужно будет использовать RelativeSource, чтобы пройти дерево вверх, чтобы найти родительский объект.