RelativeSource 类在 WPF 中提供了以下几种模式:
RelativeSource Self:指定当前元素作为相对源。可以在当前元素的属性中绑定到自身的属性。
示例:
<TextBlock Text="{Binding Text, RelativeSource={RelativeSource Self}}" />
RelativeSource TemplatedParent:指定模板的父级元素作为相对源。在自定义控件模板中使用,绑定到模板的父级元素的属性。
示例:
<ControlTemplate TargetType="local:CustomButton">
<Border Background="{Binding Background, RelativeSource={RelativeSource TemplatedParent}}">
<!-- 模板定义 -->
</Border>
</ControlTemplate>
RelativeSource FindAncestor:指定在祖先元素中进行查找。可以指定 AncestorType 来指示查找的具体类型,在找到匹配的第一个祖先后进行绑定。
示例:
<TextBlock Text="{Binding DataContext.PropertyName, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MainWindow}}}"/>
RelativeSource PreviousData:在绑定集合数据时,绑定到前一个数据项的属性。只能在 ItemsControl 或具有类似行为的控件中使用。
示例:
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"
Foreground="{Binding PreviousData.Completed,
Converter={StaticResource StatusToColorConverter}}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>