如何将WPF绑定与RelativeSource一起使用?
时间:2020-03-05 18:59:07 来源:igfitidea点击:
如何在WPF绑定中使用" RelativeSource",以及不同的用例?
解决方案
回答
不要忘记TemplatedParent:
<Binding RelativeSource="{RelativeSource TemplatedParent}"/>
或者
{Binding RelativeSource={RelativeSource TemplatedParent}}
回答
如果要绑定到对象的另一个属性:
{Binding Path=PathToProperty, RelativeSource={RelativeSource Self}}
如果我们想获得祖先的财产:
{Binding Path=PathToProperty, RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}
如果要在模板化父对象上获取属性(因此可以在ControlTemplate中进行2种方式的绑定)
{Binding Path=PathToProperty, RelativeSource={RelativeSource TemplatedParent}}
或者更短(仅适用于OneWay绑定):
{TemplateBinding Path=PathToProperty}
回答
Binding RelativeSource={ RelativeSource Mode=FindAncestor, AncestorType={x:Type ItemType} } ...
" RelativeSource"的默认属性是" Mode"属性。此处提供了一组完整的有效值(来自MSDN):
- PreviousData允许我们在显示的数据项列表中绑定上一个数据项(不包含该数据项的控件)。
- TemplatedParent引用模板(数据绑定元素存在于其中)所应用到的元素。这与设置TemplateBindingExtension相似,并且仅在Binding在模板内时适用。
- Self指的是我们要在其上设置绑定的元素,并允许我们将该元素的一个属性绑定到同一元素上的另一个属性。
- FindAncestor引用数据绑定元素的父链中的祖先。我们可以使用此方法绑定到特定类型或者其子类的祖先。如果要指定AncestorType和/或者AncestorLevel,则使用此模式。
回答
值得一提的是,对于那些在Silverlight思维上绊脚石的人:
Silverlight仅提供这些命令中的精简子集
回答
我刚刚发布了另一个解决方案,该解决方案用于访问Silverlight中对我有用的父元素的DataContext。它使用Binding ElementName
。