关闭

WPF中的binding(九)- 使用Binding的RelativeSource

2012人阅读 评论(5) 收藏 举报
分类:
我们进行Bingding时,如果明确知道数据源的Name,就能用Source或者ElementName进行绑定,但是有时候我们需要绑定的数据源可能没有明确的Name,此时我们就需要利用Bingding的RelativeSource进行绑定。

一、控件关联自身的属性

<Window x:Class="_6_27.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid x:Name="g1" Background="Red" Margin="10">
        <DockPanel Name="d1" Background="Orange" Margin="10">
            <Grid x:Name="g2" Background="Yellow" Margin="10">
                <DockPanel Name="d2" Background="LawnGreen" Margin="10">
                    <TextBox Name="textbox" FontSize="24" Margin="10"
                             Text="{Binding RelativeSource={RelativeSource Mode=Self},Path=Name}"/>
                </DockPanel>
            </Grid>
        </DockPanel>
    </Grid>
</Window>


关联控件本身的属性时,只需要设置RelativeSource的Mode=Self即可。


其等效的cs代码:

RelativeSource rs = new RelativeSource();
 rs.Mode = RelativeSourceMode.Self;
 Binding binding = new Binding("Name") { RelativeSource = rs };
 this.textbox.SetBinding(TextBox.TextProperty, binding);

运行效果如下:


二、控件关联其父级容器的属性

<Window x:Class="_6_27.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid x:Name="g1" Background="Red" Margin="10">
        <DockPanel Name="d1" Background="Orange" Margin="10">
            <Grid x:Name="g2" Background="Yellow" Margin="10">
                <DockPanel Name="d2" Background="LawnGreen" Margin="10">
                    <TextBox Name="textbox" FontSize="24" Margin="10"
                             Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Grid},AncestorLevel=1},Path=Name}"/>
                </DockPanel>
            </Grid>
        </DockPanel>
    </Grid>
</Window>

RelativeSource属性的数据类型为RelativeSource类,AncestorLevel指的是以Bingding目标控件为起点的层级偏移量,d2的偏移量是1,g2的偏移量是2,AncestorType指的是要找的目标对象的类型。值得注意的是AncestorLevel需要参考AncestorType使用,如上面设置了AncestorType={x:Type Grid},则Bingding在寻找时会忽略非Grid的控件,此时g2的偏移量是1,g1的偏移量是2,DockPanel被忽略。

1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

WPF绑定数据源之RelativeSource

转自:  http://www.douban.com/note/217168378/ WPF绑定数据源之RelativeSource   一.FindAncestor ...
  • normallife
  • normallife
  • 2015-04-12 21:29
  • 8172

wpf之datagrid 序号列

方法一:在datagrid最前面添加序列号 窗体加载时: private void MdiChild_Loaded(object sender, RoutedEventArgs e) ...
  • u010121883
  • u010121883
  • 2015-10-31 22:01
  • 2655

【WPF】CommandParameter无法多传参?传递控件自身的ItemSource数据

Command传递控件自身
  • qq_18995513
  • qq_18995513
  • 2016-12-28 11:25
  • 1950

数据绑定(八)使用Binding的RelativeSource

当一个Binding有明确的数据来源时可以通过为Source或ElementName赋值的办法让Binding与之关联,有的时候由于不能确定Source的对象叫什么名字,但知道它与作为Binding目...
  • iamsupercola
  • iamsupercola
  • 2011-12-07 21:00
  • 14196

Silverlight中Binding属性RelativeSource

本文github:https://github.com/kiwiwin/silverlight-demo,文件夹:domain-service-duplex-by-auto-refresh-demo ...
  • kiwi_coder
  • kiwi_coder
  • 2012-12-02 15:00
  • 4459

WPF中的binding(四)- 使用集合对象作为列表控件的ItemsSource

WPF中列表式控件派生自ItemsControl类,继承了ItemsSource属性。ItemsSource属性可以接收一个IEnumerable接口派生类的实例作为自己的值(所有可被迭代遍历的集合都...
  • lzhui1987
  • lzhui1987
  • 2016-06-08 18:54
  • 2713

WPF使用Binding对数据的校验

我们通常都会设置对输入的数值进行校验,在WPF也一样,在本示例中,我们使用两个控件,分别是TextBox1和Slider1,通过文本控件,输入符合slider的值,如果值不在此范围则显示文本框为红色,...
  • yuanchunze
  • yuanchunze
  • 2011-10-19 09:19
  • 2383

深入浅出WPF之Binding的使用(一)

from:   http://www.cnblogs.com/akwwl/p/3421005.html 在WPF中Binding可以比作数据的桥梁,桥梁的两端分别是Binding的源...
  • aidem_brown
  • aidem_brown
  • 2017-07-27 21:35
  • 163

WPF入门教程系列(二) 深入剖析WPF Binding的使用方法

同一个对象(特指System.Windows.DependencyObject的子类)的同一种属性(特指DependencyProperty)只能拥有一个binding。 这一点可以通过设置bi...
  • gws1229
  • gws1229
  • 2014-02-20 08:39
  • 540

WPF入门系列教程(二) 深入剖析WPF Binding的使用方法

同一个对象(特指System.Windows.DependencyObject的子类)的同一种属性(特指DependencyProperty)只能拥有一个binding。 这一点可以通过设置bi...
  • StudyBao
  • StudyBao
  • 2013-02-21 14:31
  • 736
    个人资料
    • 访问:473441次
    • 积分:7607
    • 等级:
    • 排名:第3289名
    • 原创:303篇
    • 转载:17篇
    • 译文:1篇
    • 评论:68条
    其它平台
    博客专栏