您的位置:首页 > 其它

WPF绑定数据源之RelativeSource

2015-04-12 21:29 507 查看
转自:
http://www.douban.com/note/217168378/

WPF绑定数据源之RelativeSource

一.FindAncestor

有时候我们不确定作为数据源的对象叫什么名字,但知道作为绑定源与UI布局有相对的关系,如下是一段XAML代码,说明多层布局控件中放置一个文本控件,来显示父级控件的名称。

1、XAML

Html代码:

<Grid x:Name="g1" Background="Red" Margin="10">

<DockPanel x:Name="d1" Background="Orange" Margin="10">

<Grid x:Name="g2" Background="Yellow" Margin="10">

<DockPanel x:Name="d2" Background="LawnGreen" Margin="10">

<TextBox x:Name="textBox1" FontSize="24" Margin="10"/>

</DockPanel>

</Grid>

</DockPanel>

</Grid>

2、后台代码

Csharp代码 :

RelativeSource rs = new RelativeSource(RelativeSourceMode.FindAncestor);

//设定为离自己控件最近的第二层父控件

rs.AncestorLevel = 2;

//设定父控件为Gird类型

rs.AncestorType = typeof(Grid);

//绑定源为Grid的名称

Binding binding = new Binding("Name") { RelativeSource=rs};

//将绑定的源放在文本显示内容中

this.textBox1.SetBinding(TextBox.TextProperty, binding);

3、以上后台代码等同于XAML中的

Html代码:

<TextBox x:Name="textBox1" FontSize="24" Margin="10" Text="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Grid},AncestorLevel=2},Path=Name}"/>

二.TemplatedParent

TemplatedParent是RelativeSource的其中一种方式,使用该方式将使源元素成为模板目标类型—即TargetType;如果该绑定是在模板中,那么它的作为范围也只限于该模板.

例:

<Style TargetType="{x:Type local:TemplatedParent}">

<Setter Property="Background" Value="Green"/>

<Setter Property="Template">

<Setter.Value>

<ControlTemplate TargetType="{x:Type local:TemplatedParent}">

<Grid>

<Ellipse>

<Ellipse.Fill>

<SolidColorBrush Color="{Binding Path=Background.Color,RelativeSource={RelativeSource TemplatedParent}}"/>

</Ellipse.Fill>

</Ellipse>

</Grid>

</ControlTemplate>

</Setter.Value>

</Setter>

</Style>

这样绑定的源元素就指向local:TemplatedParent这个目标类型了,所以当你修改目标类型的背景颜色时,Ellipse也将跟随它变化。

三.Self

<Window x:Class="WpfApplication1.chap5_2"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="chap5_2" Height="300" Width="300">

<Grid>

<Slider Name="slider"

Margin="4" Interval="1"

TickFrequency="1"

IsSnapToTickEnabled="True"

Minimum="0" Maximum="100"

ToolTip="{Binding RelativeSource ={ RelativeSource Self}, Path=Value}"/>

</Grid>

</Window>

其中Binding RelativeSource={RelativeSource Self}等价于Binding RelativeSource={x:Static RelativeSource.Self}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: