一、概述

当Binding有明确的数据来源的时候,我们可以用Source或者ElementName赋值的办法让Binding与之关联。

但是,有时候当我们不能确定作为Source的对象叫什么名字的时候,但我们知道它与作为Binding目标的对象在UI布局上的对应关系的时候,我们就

需要使用Binding的RelativeSource属性了。

二、例子

以下例子演示了使用Binding的RelativeSource属性来绑定父级容器的Name属性以及控件本身的Name属性。

 1 <Window x:Class="BindingDemo3XmlDataSource.MainWindow"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6 xmlns:local="clr-namespace:BindingDemo3XmlDataSource"
7 mc:Ignorable="d"
8 Title="BindingDemo3RelativeSource" Height="350" Width="525">
9 <Grid x:Name="g1" Margin="10" Background="Red">
10 <DockPanel x:Name="d1" Margin="10" Background="Pink" >
11 <Grid x:Name="g2" Margin="20" Background="Green" >
12 <DockPanel x:Name="d2" Margin="10" Background="PaleVioletRed" >
13 <Grid x:Name="g3" Margin="10" Background="Red">
14 <Grid x:Name="g4" Margin="10" Background="Green">
15 <Grid.RowDefinitions>
16 <RowDefinition Height="*"/>
17 <RowDefinition Height="*"/>
18 <RowDefinition Height="*"/>
19 </Grid.RowDefinitions>
20 <TextBox Background="AliceBlue"
21 Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorLevel=4,AncestorType={x:Type Grid}}, Path=Name}"
22 FontSize="22" FontWeight="Bold" TextAlignment="Center">
23
24
25 </TextBox>
26 <TextBox Grid.Row="1" Background="Silver"
27 Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorLevel=1,AncestorType={x:Type DockPanel}}, Path=Name}"
28 FontSize="22" FontWeight="Bold" TextAlignment="Center">
29
30 </TextBox>
31 <TextBox Grid.Row="2" Background="AliceBlue" Name="TextBox1"
32 Text="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Name}"
33 FontSize="22" FontWeight="Bold" TextAlignment="Center">
34
35 </TextBox>
36 </Grid>
37 </Grid>
38 </DockPanel>
39 </Grid>
40 </DockPanel>
41 </Grid>
42 </Window>

部分等价的C#代码参考以下:

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

结果如下:

WPF---数据绑定之RelativeSource(五)的更多相关文章

  1. WPF数据绑定Binding(二)

    WPF数据绑定Binding(二) 1.UI控件直接的数据绑定 UI对象间的绑定,也是最基本的形式,通常是将源对象Source的某个属性值绑定 (拷贝) 到目标对象Destination的某个属性上. ...

  2. 微软原文翻译:适用于.Net Core的WPF数据绑定概述

    原文链接,大部分是机器翻译,仅做了小部分修改.英.中文对照,看不懂的看英文. Data binding overview in WPF 2019/09/19 Data binding in Windo ...

  3. WPF 数据绑定Binding

    什么是数据绑定? Windows Presentation Foundation (WPF) 数据绑定为应用程序提供了一种简单而一致的方法来显示数据以及与数据交互. 通过数据绑定,您可以对两个不同对象 ...

  4. WPF——数据绑定(一)什么是数据绑定

    注意:本人初学WPF,文中可能有表达或者技术性问题,欢迎指正!谢谢! 一:什么是数据绑定? “Windows Presentation Foundation (WPF) 数据绑定为应用程序提供了一种简 ...

  5. 剖析WPF数据绑定机制

    引言 WPF框架采取的是MVVM模式,也就是数据驱动UI,UI控件(Controls)被严格地限制在表示层内,不会参与业务逻辑的处理,只是通过数据绑定(Data Binding)简单忠实地表达与之绑定 ...

  6. WPF 10天修炼 第十天- WPF数据绑定

    WPF数据绑定 数据绑定到元素属性是将源对象指定为一个WPF元素,并且源属性是一个依赖属性,依赖属性内置了变更通知.当改变源对象依赖属性值之后,绑定目标可以立即得到更新,开发人员不需要手动编写响应事件 ...

  7. 【WPF学习】第五十四章 关键帧动画

    到目前为止,看到的所有动画都使用线性插值从起点到终点.但如果需要创建具有多个分段的动画和不规则移动的动画.例如,可能希望创建一个动画,快速地将一个元素滑入到视图中,然后慢慢地将它移到正确位置.可通过创 ...

  8. 【WPF学习】第五十七章 使用代码创建故事板

    在“[WPF学习]第五十章 故事板”中讨论了如何使用代码创建简单动画,以及如何使用XAML标记构建更复杂的故事板——具有多个动画以及播放控制功能.但有时采用更复杂的故事板例程,并在代码中实现全部复杂功 ...

  9. C#-WPF数据绑定基础(一)

    前言:WPF数据绑定技术有效的提高了程序的容错率,可以最大程度的保持程序的健壮性,从而降低程序在使用过程中崩掉的可能性. 接下来,我将分享一下我在写测量程序过程中所用到的数据绑定方面的知识 首先,我所 ...

  10. C#WPF数据绑定模板化操作四步走

    前言:WPF数据绑定对于WPF应用程序来说尤为重要,本文将讲述使用MVVM模式进行数据绑定的四步走用法: 具体实例代码如下: 以下代码仅供参考,如有问题请在评论区留言,谢谢 1 第一步:声明一个类用来 ...

随机推荐

  1. python 得到变量名的结果为名的变量的值locals()

    >>> a="1">>> b="a">>> print(a,b)1 a>>> print ...

  2. [刘阳Java]_Spring AOP基于XML配置介绍_第9讲

    基于注解配置的Spring AOP固然简单,但是这节我们会给大家介绍基于XML配置的AOP是如何应用的.为什么这么说了,因为后面我们还会介绍到Spring对Dao操作的事务管理(基于AOP的XML文件 ...

  3. selenium3 + python - js&jquery操作处理

    # 推荐学习:https://www.w3school.com.cn/js/index.asp## 下面以简书登录&注册定位元素为例"""js定位 id name ...

  4. 从源码构建Vim

    从源码构建Vim 引言 事情是介样滴,因为我是个Vim 重度使用者了差不多.. 但在大部分系统上能安装到的或者自带的都是比较老的版本,可能是7.x 之类的.也或者是你需要使用到Vim 的某些特性或者功 ...

  5. centos7 几种修改系统时区的方法

    1.  # cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # ln -sf /usr/share/zoneinfo/Asia/Shanghai ...

  6. 笛卡尔树-P2659 美丽的序列

    P2659 美丽的序列 tag 笛卡尔树 题意 找出一个序列的所有子段中子段长度乘段内元素最小值的最大值. 思路 我们需要找出所有子段中贡献最大的,并且一个子段的贡献为其长度乘区间最小值. 这--不就 ...

  7. 期望长度P1365,CF235B,P1654

    期望长度 定义 这里期望长度表示一段序列连续长度的期望.具体来说,对于一段序列,每个点都有一个概率连续和断开.求所有连续序列和的期望. 当然,对于以上期望长度的定义,我们只需要求出每个点存在的期望的和 ...

  8. wait()、notify()、notifyAll()(三)

    有新理解持续更新 轮询 线程本身是操作系统中独立的个体,但是线程与线程之间不是独立的个体,因为它们彼此之间要相互通信和协作. 想像一个场景,A线程做int型变量i的累加操作,B线程等待i到了10000 ...

  9. java 向Redis中存放数据 List<Device>转String

    /** * redis服务 */ @Autowired private RedisService redisService; //创建 Device  对象 Device no = new Devic ...

  10. Maven作用及应用

    1.简介 Maven是一个项目管理的Java 工具,在JavaEE中,我们可以使用Maven方便地管理团队合作的项目,现在我们在学习JavaEE框架,使用Maven可以管理类库,有效方便地供团队中的其 ...