我正在尝试理解RelativeSource绑定,但我找不到TemplatedParent的定义。 MSDN says:
“获取一个静态值,用于返回为TemplatedParent模式构造的RelativeSource。”
它不会出现在“Windows Presentation Foundation Unleashed”的索引中。
简单来说,什么是TemplatedParent?
答案 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表示父级已模板化。模板化是英语的被动语态。换句话说,父元素将应用模板。因此,在模板中,您可以轻松绑定父母的财产。