WPF教程(四)RelativeSource属性

2018年08月13日 15:11:56 yangwenxue1989 阅读数:749

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

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

  1. <Window x:Class= "RelativeSource.MainWindow"
  2. xmlns= "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x= "http://schemas.microsoft.com/winfx/2006/xaml"
  4. Title= "MainWindow" Height="350" Width="525">
  5. <Grid>
  6. <StackPanel>
  7. <TextBox Height= "30" Width="60" Name="Box1" Text="{Binding RelativeSource={RelativeSource Mode=self},Path=Name }"/>
  8. </StackPanel>
  9. </Grid>
  10. </Window>

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

  1. public MainWindow()
  2. {
  3. InitializeComponent();
  4. System.Windows.Data.RelativeSource rs = new System.Windows.Data.RelativeSource();
  5. rs.Mode = RelativeSourceMode.Self;
  6. Binding binding = new Binding("Name") { RelativeSource = rs };
  7. this.Box1.SetBinding(TextBox.TextProperty, binding);
  8. }

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

  1. <Window x:Class= "RelativeSource.MainWindow"
  2. xmlns= "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x= "http://schemas.microsoft.com/winfx/2006/xaml"
  4. Title= "MainWindow" Height="350" Width="525">
  5. <Grid Name= "G1">
  6. <Grid Name= "G2">
  7. <StackPanel Name= "S1">
  8. <TextBox Height= "30" Width="60" Name="Box1" Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Grid}, AncestorLevel=2},Path=Name }"/>
  9. </StackPanel>
  10. </Grid>
  11. </Grid>
  12. </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

  1. <Window.Resources>
  2. <Style TargetType= "{x:Type Button}">
  3. <Setter Property= "Background" Value="Green"/>
  4. <Setter Property= "Template">
  5. <Setter.Value>
  6. <ControlTemplate TargetType= "{x:Type Button}">
  7. <Grid>
  8. <Ellipse>
  9. <Ellipse.Fill>
  10. <SolidColorBrush Color= "{Binding Path=Background.Color,RelativeSource={RelativeSource TemplatedParent}}"/>
  11. </Ellipse.Fill>
  12. </Ellipse>
  13. </Grid>
  14. </ControlTemplate>
  15. </Setter.Value>
  16. </Setter>
  17. </Style>
  18. </Window.Resources>

总结

从运用性上介绍了RelativeSource三种使用方法,目前就碰到三种,有新的会继续更。知识是没有边界的,不断地探知即为知识来源,取之不竭、用之不尽。刚刚新开项目,安排了不少任务,有时间再写。

转载于:https://www.cnblogs.com/LiZhongZhongY/p/10870405.html

WPF教程(四)RelativeSource属性(转)相关推荐

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

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

  2. .NET WPF教程(7)——布局介绍WrapPanel与StackPanel(②)

    三. WrapPanel WrapPanel布局面板将各个控件从左至右按照行或列的顺序罗列,当长度或高度不够是就会自动调整进行换行,后续排序按照从上至下或从右至左的顺序进行.     Orientat ...

  3. MVC5+EF6 入门完整教程四

    MVC5+EF6 入门完整教程四 原文:MVC5+EF6 入门完整教程四 上篇文章主要讲了如何配置EF, 我们回顾下主要过程: 创建Data Model à 创建Database Context à创 ...

  4. Docker教程(四) Docker镜像构建

    Docker教程(四) Docker镜像构建 本文链接:https://blog.csdn.net/yuan_xw/article/details/77744272 Docker教程(四) Docke ...

  5. 区块链教程(四):搭建私链、web3.js基础

    注:本教程为技术教程,不谈论且不涉及炒作任何数字货币 区块连教程(一):前置知识-linux补充 区块链教程(二):基础概念介绍 区块链教程(三):Solidity编程基础 区块链教程(四):搭建私链 ...

  6. WPF教程六:布局之Grid面板(转)

    WPF教程六:布局之Grid面板 Grid:网格面板 Grid顾名思义就是"网格",以表格形式布局元素,对于整个面板上的元素进行布局,它的子控件被放在一个一个事先定义好的小格子里面 ...

  7. Laravel教程 四:数据库和Eloquent

    Laravel教程 四:数据库和Eloquent 此文章为原创文章,未经同意,禁止转载. Eloquent Database 上一篇写了一些Laravel Blade的基本用法和给视图传递变量的几种方 ...

  8. Directx11教程四十六之FBX SDK

    在之前的DX11入门系列文章中,有篇有关 Directx11教程四十之加载OBJ模型 读取obj模型数据的博客.不过在obj读取的那篇博客我有些坑并没有说,就是我写的那个obj解析器只能解析特定的ob ...

  9. .NET WPF教程(6)——布局介绍与Canvas(①)

    从这篇文章开始是对WPF中的界面如何布局做一个较简单的介绍,大家都知道:UI是做好一个软件很重要的因素,如果没有一个漂亮的UI,功能做的再好也无法吸引很多用户使用,而且没有漂亮的界面,那么普通用户会感 ...

最新文章

  1. 微信小程序图片变形解决方法
  2. css+隐藏+左侧菜单栏,放在网页左侧的DIV+CSS隐藏菜单代码
  3. 阿里云将增设马来西亚数据中心 中国技术获赞
  4. 图像的全局特征--HOG特征、DPM特征
  5. SpringBoot 集成 Nacos
  6. 【汇编语言】【ARM扩展资料】数据寻址
  7. 几何学五大公理_【欧几里德的平面几何五大公理是什么?】作业帮
  8. Aster及其它遥感数据下载地址
  9. mysql连接本地数据库失败_“sql server”连接本地数据库失败怎么办?
  10. 输入日期得出星座c语言,根据日期计算星座
  11. 微信开放平台:微信扫码登录功能
  12. phpcms下载页直接显示下载真实地址方法
  13. 【论文笔记】AVSM:结合了仿射配准和vSVF配准的医学图像配准模型
  14. 管理后台项目-06-用户管理角色管理模块
  15. 红米html查看设置,红米路由器怎么进去设置界面?
  16. 演算法 - 分治法(Divide-and-Conquer)
  17. 签名不对,请检查签名是否与开放平台上填写的一致。
  18. 转载《CSDC开发者大会感想》
  19. Springboot 中的Redis 事务使用
  20. 小黑记事本怎样设置html,小黑记事本如何使用便签 设置便签的方法

热门文章

  1. 使用Pytorch自带模型预测图片
  2. 常见前端面试题:html语义化
  3. ffmpeg所支持的所有视频或音频文件类型
  4. hover 在 ie 中使用失效问题
  5. CANopen--PDO通信
  6. 职称计算机考试 word,全国职称计算机考试-word
  7. 数字图像处理(四):彩色空间及转换公式
  8. 一个传统的分销+仓储+物流的功能,软件能做些什么让它最快看到成果
  9. 以太坊签名验签原理全面解析
  10. android 手机在忘记解锁密码/图案情况下,且未开通usb调试模式下如何解锁