WPF教程(四)RelativeSource属性(转)
WPF教程(四)RelativeSource属性
我们进行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>
总结
从运用性上介绍了RelativeSource三种使用方法,目前就碰到三种,有新的会继续更。知识是没有边界的,不断地探知即为知识来源,取之不竭、用之不尽。刚刚新开项目,安排了不少任务,有时间再写。
转载于:https://www.cnblogs.com/LiZhongZhongY/p/10870405.html
WPF教程(四)RelativeSource属性(转)相关推荐
- WPF系列教程(二十五):绑定到非元素对象Source属性、RelativeSource属性、DataContext属性
项目源码 数据绑定Binding Source属性 把TextBlock的Text属性绑定到静态的SystemFonts.IconFontFamily: <TextBlock Text=&quo ...
- .NET WPF教程(7)——布局介绍WrapPanel与StackPanel(②)
三. WrapPanel WrapPanel布局面板将各个控件从左至右按照行或列的顺序罗列,当长度或高度不够是就会自动调整进行换行,后续排序按照从上至下或从右至左的顺序进行. Orientat ...
- MVC5+EF6 入门完整教程四
MVC5+EF6 入门完整教程四 原文:MVC5+EF6 入门完整教程四 上篇文章主要讲了如何配置EF, 我们回顾下主要过程: 创建Data Model à 创建Database Context à创 ...
- Docker教程(四) Docker镜像构建
Docker教程(四) Docker镜像构建 本文链接:https://blog.csdn.net/yuan_xw/article/details/77744272 Docker教程(四) Docke ...
- 区块链教程(四):搭建私链、web3.js基础
注:本教程为技术教程,不谈论且不涉及炒作任何数字货币 区块连教程(一):前置知识-linux补充 区块链教程(二):基础概念介绍 区块链教程(三):Solidity编程基础 区块链教程(四):搭建私链 ...
- WPF教程六:布局之Grid面板(转)
WPF教程六:布局之Grid面板 Grid:网格面板 Grid顾名思义就是"网格",以表格形式布局元素,对于整个面板上的元素进行布局,它的子控件被放在一个一个事先定义好的小格子里面 ...
- Laravel教程 四:数据库和Eloquent
Laravel教程 四:数据库和Eloquent 此文章为原创文章,未经同意,禁止转载. Eloquent Database 上一篇写了一些Laravel Blade的基本用法和给视图传递变量的几种方 ...
- Directx11教程四十六之FBX SDK
在之前的DX11入门系列文章中,有篇有关 Directx11教程四十之加载OBJ模型 读取obj模型数据的博客.不过在obj读取的那篇博客我有些坑并没有说,就是我写的那个obj解析器只能解析特定的ob ...
- .NET WPF教程(6)——布局介绍与Canvas(①)
从这篇文章开始是对WPF中的界面如何布局做一个较简单的介绍,大家都知道:UI是做好一个软件很重要的因素,如果没有一个漂亮的UI,功能做的再好也无法吸引很多用户使用,而且没有漂亮的界面,那么普通用户会感 ...
最新文章
- 微信小程序图片变形解决方法
- css+隐藏+左侧菜单栏,放在网页左侧的DIV+CSS隐藏菜单代码
- 阿里云将增设马来西亚数据中心 中国技术获赞
- 图像的全局特征--HOG特征、DPM特征
- SpringBoot 集成 Nacos
- 【汇编语言】【ARM扩展资料】数据寻址
- 几何学五大公理_【欧几里德的平面几何五大公理是什么?】作业帮
- Aster及其它遥感数据下载地址
- mysql连接本地数据库失败_“sql server”连接本地数据库失败怎么办?
- 输入日期得出星座c语言,根据日期计算星座
- 微信开放平台:微信扫码登录功能
- phpcms下载页直接显示下载真实地址方法
- 【论文笔记】AVSM:结合了仿射配准和vSVF配准的医学图像配准模型
- 管理后台项目-06-用户管理角色管理模块
- 红米html查看设置,红米路由器怎么进去设置界面?
- 演算法 - 分治法(Divide-and-Conquer)
- 签名不对,请检查签名是否与开放平台上填写的一致。
- 转载《CSDC开发者大会感想》
- Springboot 中的Redis 事务使用
- 小黑记事本怎样设置html,小黑记事本如何使用便签 设置便签的方法