WPF绑定数据源之RelativeSource
2015-01-21 20:14
330 查看
Command="{Binding ConfirmRegisterCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self},Path=DataContext}"
一.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}
相关文章推荐
- WPF利用通过父控件属性来获得绑定数据源RelativeSource
- WPF利用通过父控件属性来获得绑定数据源RelativeSource
- WPF绑定数据源之RelativeSource
- WPF学习笔记——ListBox用ItemsSource绑定数据源
- WPF学习笔记——ListBox用ItemsSource绑定数据源
- WPF学习笔记——ListBox用ItemsSource绑定数据源
- WPF的ComboBox数据绑定,使用Dictionary作为数据源
- 稳扎稳打Silverlight(40) - 3.0绑定之Element to Element Binding, RelativeSource; 样式之动态修改样式, 样式继承, 自定义光标
- wpf中datagrid绑定数据源发生改变
- WPF绑定各种数据源之object数据源
- 背水一战 Windows 10 (19) - 绑定: TemplateBinding 绑定, 与 RelativeSource 绑定, 与 StaticResource 绑定
- WPF\Silverlight 数据源绑定方式
- [原创]WPF中ListView绑定数据源后居中显示
- WPF and Silverlight 学习笔记(二十三):绑定集合数据源
- WPF使用 ObjectDataProvider 为方法作为绑定数据源
- WPF(Binding of RelativeSource)
- Combobox绑定泛型字典时提示“复杂的 DataBinding 接受 IList 或 IListSource 作为数据源”的解决方法
- .net object source 快速生成与数据源绑定的控件
- WPF-获取Combobox已绑定的数据源并转成Dictionary
- WPF绑定数据源