我们进行Bingding时,如果明确知道数据源的Name,就能用Source或者ElementName进行绑定,但是有时候我们需要绑定的数据源可能没有明确的Name,此时我们就需要利用Bingding的RelativeSource进行绑定,这种办法的意思是指当前元素和绑定源的位置关系。

(1)控件关联自身的属性——Self

<Window x:Class="RelativeSource.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><StackPanel><TextBox Height="30" Width="60" Name="Box1" Text="{Binding RelativeSource={RelativeSource Mode=self},Path=Name }"/></StackPanel></Grid>
</Window>

上例是前台xaml写法,再看下后台怎么实现:

public MainWindow()
{InitializeComponent();System.Windows.Data.RelativeSource rs = new System.Windows.Data.RelativeSource();rs.Mode = RelativeSourceMode.Self;Binding binding = new Binding("Name") { RelativeSource = rs };this.Box1.SetBinding(TextBox.TextProperty, binding);
}

(2)控件关联其父级容器的属性——AncestorType

<Window x:Class="RelativeSource.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 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>
</Window>

详细介绍下AncestorLevel,它指的是以Bingding目标控件为起点的层级偏移量,S1的偏移量是1,G2的偏移量是2,G1是偏移量3,AncestorType指的是要找的目标对象的类型。值得注意的是AncestorLevel必须参考AncestorType使用,如上面设置了AncestorType={x:Type Grid},则Bingding在寻找时会忽略非Grid的控件,此时G2的偏移量是1,G1的偏移量是2,StackPanel被忽略。

(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 RelativeSource属性相关推荐

  1. WPF教程(四)RelativeSource属性(转)

    WPF教程(四)RelativeSource属性 2018年08月13日 15:11:56 yangwenxue1989 阅读数:749 我们进行Bingding时,如果明确知道数据源的Name,就能 ...

  2. WPF系列教程(二十五):绑定到非元素对象Source属性、RelativeSource属性、DataContext属性

    项目源码 数据绑定Binding Source属性 把TextBlock的Text属性绑定到静态的SystemFonts.IconFontFamily: <TextBlock Text=&quo ...

  3. C#WPF XAML属性

    C#WPF XAML属性 一.属性语法 1.属性是对XAML元素特征进行描述的方法:属性不允许在XAML中重复设置多次:允许 在托管代码中改变元素的属性值 . (1).属性设置的几种方式: 使用特性语 ...

  4. wpf 依赖属性和附加属性

    原文:wpf 依赖属性和附加属性 1.依赖属性 解释:依赖属性是配合binding出现的产物,功能主要是配合binding. 作用: 一.当自定义usercontrol时,需要与宿主(父窗体)双向绑定 ...

  5. 初步了解WPF依赖属性

    一 依赖属性 在WPF库实现中,依赖属性使用普通的C#属性进行了包装,使得我们可以通过和以前一样的方式来使用依赖属性.但必须明确,在WPF中我们大多数都在使用依赖属性,而不是使用属性.依赖属性重要性在 ...

  6. WPF教程(四)RelativeSource属性

    我们进行Bingding时,如果明确知道数据源的Name,就能用Source或者ElementName进行绑定,但是有时候我们需要绑定的数据源可能没有明确的Name,此时我们就需要利用Bingding ...

  7. Wpf依赖属性和附加属性在样式中的应用

    文章目录 前言 一.依赖属性的使用方法 1.添加派生类(以Button为例) 2.修改样式模板 3.前台应用 二.依赖属性的使用方法 1.添加普通类 2.修改模板 3.前台使用 总结 前言 在wpf的 ...

  8. WPF依赖属性(续)(1)

    之前有写过几篇文章,详细地介绍了依赖属性的基本使用方法,如果你不想了解其内部实现机制的话,那么通过那两篇文章的介绍,足以应付平时的应用了.关于其内部实现,博客园的周永恒也有人详细介绍过,还原了依赖属性 ...

  9. WPF 设置属性“System.Windows.FrameworkElement.Style”时引发了异常

    开发工具与关键技术:Microsoft Visual Studio 2017.WPF 现象: 用WPF开发的软件在个别电脑系统下安装后无法启动,报异常:设置属性"System.Windows ...

最新文章

  1. eclipse xsd 生成java,Generate XSD from JAXB Java Classes using Eclipse
  2. tc溜溜865手机投屏卡_游戏物理外挂再升级!腾讯黑鲨游戏手机3S开箱体验
  3. Codeforces Round #514 (Div. 2)题解
  4. 基于知识图谱的问答系统(以医疗行业为例)
  5. UI5 Source code map机制的细节介绍
  6. mysql5.7.17的linux安装,linux下mysql5.7.17最新稳定版本安装教程
  7. Azkaban运行报错:我找到的几个错误问题
  8. 摄像头系统linux,Linux摄像头编程
  9. pytorch 中的数据类型,tensor的创建
  10. 湿气重的人,脸上会有哪些信号?
  11. 下载软件的临时文件思路和实现
  12. SSH(Struts2+Spring+Hibernate)框架搭建流程
  13. 解决办法:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系
  14. python使用gps设备
  15. Maya粒子特效制作(一)
  16. python怎么换行输入print_python中print换行的方法
  17. 获取子进程终止状态:wait和waitpid
  18. 五猴分桃python_猴子分桃问题 | 学步园
  19. 计算机课艺术字四周型怎么弄,Word.文档中艺术字环绕方式四周型怎么设置
  20. linux hudson svn,Hudson Maven SVN快速搭建持续集成环境

热门文章

  1. 深度学习:卷积神经网络中的卷积核
  2. 十大集成灶火星人电商销售7年蝉联桂冠,再战618战绩如何?拭目以待
  3. 软件工程-系统需求获取技术、结构化需求建模和系统设计(上)
  4. 20kw-100kw光伏逆变器原理图 PCB 代码 20KW-100kw双路光伏BOOST三相三电平光伏并网逆变器
  5. VM虚拟机中使用reboot命令后 无法重启虚拟机
  6. 2022数学建模国赛B题和C题高质量论文代码数据
  7. 回归测试的关键性和重要性及测试方法
  8. [Google GTS][7.0R2]GtsSettingsTestCases(顺道以该case为例介绍GTS BL机制)
  9. 验证码识别 matlab,MATLAB数字验证码识别
  10. 戴尔笔记本重装系统win7,一键重装系统教程