Что такое TemplatedParent в WPF?

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

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

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

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

3 ответа

Решение

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 пройтись вверх по дереву, чтобы найти родительский объект.

Обратите внимание:

TemplatedParent означает, что Parent является Templated. Templated - это пассивный голос на английском. Другими словами, родительский элемент применяется с шаблоном. Таким образом, в шаблоне вы можете легко связать свойство родителя.

Другие вопросы по тегам