为了账号安全,请及时绑定邮箱和手机立即绑定

如何在RelativeSource中使用WPF绑定?

/ 猿问

如何在RelativeSource中使用WPF绑定?

小怪兽爱吃肉 2019-06-20 10:42:20

如何在RelativeSource中使用WPF绑定?

我该如何使用RelativeSource与WPF绑定和什么是不同的用例?



查看完整描述

3 回答

?
江户川乱折腾

如果要绑定到对象上的另一个属性:

{Binding Path=PathToProperty, RelativeSource={RelativeSource Self}}

如果您想获得祖先的属性:

{Binding Path=PathToProperty,
    RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}

如果希望获得模板父级上的属性(因此可以在ControlTemplate中执行双向绑定)

{Binding Path=PathToProperty, RelativeSource={RelativeSource TemplatedParent}}

或者,更短的(这只适用于OneWay绑定):

{TemplateBinding Path=PathToProperty}


查看完整回答
反对 回复 2019-06-20
?
长风秋雁
Binding RelativeSource={
    RelativeSource Mode=FindAncestor, AncestorType={x:Type ItemType}
}
...

的默认属性RelativeSourceMode财产。这里给出了一组完整的有效值(来自MSDN):

  • PreviousData允许您在显示的数据项列表中绑定以前的数据项(而不是包含数据项的控件)。

  • TemplatedParent引用应用模板(其中存在数据绑定元素)的元素。这类似于设置Template BindingExtenence,并且只适用于绑定在模板内的情况。

  • 自性引用要在其上设置绑定的元素,并允许将该元素的一个属性绑定到同一元素上的另一个属性。

  • FindAncestor引用数据绑定元素父链中的祖先。您可以使用它绑定到特定类型的祖先或其子类。如果要指定AncestorType和/或AncestorLevel,则使用此模式。


查看完整回答
反对 回复 2019-06-20
?
牛魔王的故事

想象一下,这个矩形,我们希望它的高度总是等于它的宽度,比如说一个正方形。我们可以使用元素名来完成这个任务。

<Rectangle Fill="Red" Name="rectangle" 
                    Height="100" Stroke="Black" 
                    Canvas.Top="100" Canvas.Left="100"
                    Width="{Binding ElementName=rectangle,
                    Path=Height}"/>

但在上述情况下,我们必须指出绑定对象的名称,即矩形。使用RelativeSource,我们可以不同的方式达到相同的目的

<Rectangle Fill="Red" Height="100" 
                   Stroke="Black" 
                   Width="{Binding RelativeSource={RelativeSource Self},
                   Path=Height}"/>

在这种情况下,我们不必提到绑定对象的名称,每当更改高度时,宽度总是等于高度。

如果要将宽度参数设置为高度的一半,则可以将转换器添加到绑定标记扩展中。让我们想象一下另一个案例:

 <TextBlock Width="{Binding RelativeSource={RelativeSource Self},
                   Path=Parent.ActualWidth}"/>

上面的大小写用于将给定元素的给定属性绑定到其直接父元素之一,因为该元素拥有一个称为父元素的属性。这将导致我们进入另一个相对源模式,即FindAncestor模式。


查看完整回答
反对 回复 2019-06-20
  • 3 回答
  • 0 关注
  • 1079 浏览
我要回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信