一、RelativeSource属性
我们进行Bingding时,如果明确知道数据源的Name,就能用Source或者ElementName进行绑定,但是有时候我们需要绑定的数据源可能没有明确的Name,此时我们就需要利 用Bingding的RelativeSource进行绑定,这种办法的意思是指当前元素和绑定源的位置关系。
RelativeSource的三种控件
(1)控件关联自身的属性——Self
<Grid>
<StackPanel>
<TextBox Height="30" Width="60" Name="Box1" Text="{Binding RelativeSource={RelativeSource Mode=self},Path=Name }"/>
</StackPanel>
</Grid>
(2)控件关联其父级容器的属性——AncestorType
<Grid Name="G1">
<Grid Name="G2">
<StackPanel Name="S1">
<TextBox Height="30" Width="60" Name="Box1" Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Grid}, AncestorLevel=2},Path=Name }"/>
</StackPanel>
</Grid>
</Grid>
(3)控件关联模板的属性——TemplatedParent
<Window.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="Green"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Ellipse>
<Ellipse.Fill>
<SolidColorBrush Color="{Binding Path=Background.Color,RelativeSource={RelativeSource TemplatedParent}}"/>
</Ellipse.Fill>
</Ellipse>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
二、WPF的绑定模式(mode)是枚举的 枚举值共有5个
1:OneWay (源变就更新目标属性)
Source影响着Target,但是Target却影响不到Source。
2:OneWayToSource (与OneWay相反)
Target影响Source,而Source却影响不到Target。
3:TwoWay (源变就更新目标并且目标变就更新源)
Source与Target相互影响。
4:OneTime (只根据源来设置目标,以后都不会变)
在OneWay的基础上延伸了一个OneTime,仅绑定一次。
5:Default(可以单向或双向,是靠被值定的源或目标是否有get或set来指定的)
所以绑定的话是需要选上面5个中的一个模式的,根据你的需要来选择,不选的话就会自动选择第五个的。
效果图如下: