在WPF中,什么是TemplatedParent?

时间:2011-03-14 04:07:48

标签: wpf

我正在尝试理解RelativeSource绑定,但我找不到TemplatedParent的定义。 MSDN says:

  

“获取一个静态值,用于返回为TemplatedParent模式构造的RelativeSource。”

它不会出现在“Windows Presentation Foundation Unleashed”的索引中。

简单来说,什么是TemplatedParent?

4 个答案:

答案 0 :(得分:36)

TemplatedParent指的是应用模板的Control实例。您可以使用TemplatedParent绑定到在该对象(及其基类)上声明的属性。

答案 1 :(得分:13)

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的对比度进行评估,TemplatedParent在第一个运行时之后进行评估。正如您在下图中所述,背景和内容从按钮内部应用到控件模板。

答案 2 :(得分:4)

在WPF中,模板是用于构造类型树的模板。当创建该类型的新对象时,WPF基本上会创建模板的副本。

因此,模板中,如果要引用新对象,可以使用TemplatedParent进行快速访问。否则,您必须使用RelativeSource向上走树以查找父对象。

答案 3 :(得分:0)

注意:

TemplatedParent表示父级已模板化。模板化是英语的被动语态。换句话说,父元素将应用模板。因此,在模板中,您可以轻松绑定父母的财产。