我正在尝试理解RelativeSource绑定,但我找不到TemplatedParent的定义. MSDN说:
"获取一个静态值,用于返回为TemplatedParent模式构造的RelativeSource."
它没有出现在"Windows Presentation Foundation Unleashed"的索引中.
简单来说,什么是TemplatedParent呢?
Gab*_*abe 36
TemplatedParent指的Control是应用模板的实例.您可以使用TemplatedParent绑定到在该对象(及其基类)上声明的属性.
las*_*iya 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>
Run Code Online (Sandbox Code Playgroud)
如果我想将给定控件的属性应用于其控件模板,那么我可以使用TemplatedParent模式.这个标记扩展也有类似的一个,它是TemplateBinding,它是第一个的简写,但TemplateBinding在编译时以TemplatedParent的对比度进行评估,TemplatedParent在第一个运行时之后进行评估.正如您在下图中所述,背景和内容从按钮内部应用到控件模板.
在 WPF 中,模板是用来构造类型树的。WPF 本质上是在创建该类型的新对象时制作模板的副本。
因此,在模板内部,如果要引用新对象,则使用TemplatedParent快速访问。否则,您将不得不使用RelativeSource向上走树来找到父对象。