WPF系列教程(二十五):绑定到非元素对象Source属性、RelativeSource属性、DataContext属性
项目源码
数据绑定Binding Source属性
把TextBlock的Text属性绑定到静态的SystemFonts.IconFontFamily:
<TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"/>
或者在窗体中定义源:
用元素属性定义了两个资源
<Window.Resources><FontFamily x:Key="CustomFont">Calibri</FontFamily><FontFamily x:Key="CustomFont2">Seria</FontFamily>
</Window.Resources>
使用资源时:
<TextBlock Text="{Binding Source={StaticResource CustomFont2},Path=Source}"/>
RelativeSource属性
在一个Window里面,绑定的属性为层级的属性:
<TextBlock><TextBlock.Text><Binding Path="Name"><Binding.RelativeSource><RelativeSource Mode="FindAncestor" AncestorType="{x:Type StackPanel}"></RelativeSource></Binding.RelativeSource></Binding></TextBlock.Text>
</TextBlock>
这就将TextBlock的Text属性绑定到了它的父级元素StackPannel的Name属性上。
如果Binding Path=“Title”,AncestorType="{x:Type Window}",则是绑定到了它的父级元素Window的Title属性上了。
如果 Mode=“Self”,则是绑定到了自身:
<Binding Path="Margin">
也可以用下面这种控件属性的方式设置
<TextBlock Name="textBlock4" Margin="5" Text="{Binding Path=Title,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}}">
AncestorLevel=1用于设置往上寻找父级元素的层数,例如
<TextBlock Name="textBlock4" Margin="5" Text="{Binding Path=Name,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type StackPanel},AncestorLevel=2}}">
就往上寻找父元素,直到找到第二个,就是最外层的,如果设为1,就是内层的。
DataContext属性
将大量的属性绑定到同一个元素。
例如下面三个TextBlock
<TextBlock Name="textBlock5" Margin="5" Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"/><TextBlock Name="textBlock6" Margin="5" Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=LineSpacing}"/><TextBlock Name="textBlock7" Margin="5" Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=FamilyTypefaces[0].Style}"/>
都绑定到了同一个Source,但是不同Path,代码过于重复,这时候适合使用DataContext属性。
我们在它们的父级元素之下设置DataContext属性即可:
<StackPanel Margin="3" Name="stackPannel1" DataContext="{x:Static SystemFonts.IconFontFamily}">
TextBlock元素不需要设置Source属性了,只需要设置Path属性:
<TextBlock Name="textBlock5" Margin="5" Text="{Binding Path=Source}"/>
<TextBlock Name="textBlock6" Margin="5" Text="{Binding Path=LineSpacing}"/>
<TextBlock Name="textBlock7" Margin="5" Text="{Binding Path=FamilyTypefaces[0].Style}"/>
像这样的绑定属性Binding只有Path而没有Source,控件会一直向父级元素搜索DataContext属性,直到找到最近的作为自己的源,否则,如果找不到,就不会绑定到任何源。
所以像这个例子,DataContext只要设置在TextBlock的某一个上级元素中即可供TextBlock用作源。
WPF系列教程(二十五):绑定到非元素对象Source属性、RelativeSource属性、DataContext属性相关推荐
- SpringBoot 系列教程(八十五):Spring Boot使用MD5加盐验签Api接口之前后端分离架构设计
加密算法参考: 浅谈常见的七种加密算法及实现 加密算法参考: 加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用 目的: 通过对API接口请求报文签名,后端进行验签处理, ...
- Java NIO系列教程(十 五)Java NIO Path
转载自 Java NIO系列教程(十 五)Java NIO Path 译文链接 译者:章筱虎 Java的Path接口是Java NIO2 的一部分,是对Java6 和Java7的 NIO的更新.J ...
- SpringBoot入门建站全系列(二十六)Mongodb非关系型数据库的使用
SpringBoot入门建站全系列(二十六)Mongodb非关系型数据库的使用 一.概述 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能 ...
- 推荐系统系列教程之十五:一网打尽协同过滤、矩阵分解和线性模型
编者按:之前推出了<推荐系统系列教程>,反响不错,前面已经推出了十四期,今天按约推出第十五期:一网打尽协同过滤.矩阵分解和线性模型.希望朋友们多点"在看",多多转发,我 ...
- druid 手动指定数据源_Spring Boot2 系列教程(二十)整合JdbcTemplate 多数据源
多数据源配置也算是一个常见的开发需求,Spring 和 SpringBoot 中,对此都有相应的解决方案,不过一般来说,如果有多数据源的需求,我还是建议首选分布式数据库中间件 MyCat 去解决相关问 ...
- WPF系列教程(十二):控件类——前景背景、字体Background、Foreground、FontFamily、FontSize
控件都包含背景画刷和前景画刷属性. 部分控件包含字体属性. 鼠标光标的设置. 示例项目源码 为控件设置背景与前景 下面这个窗体 <Window x:Class="Control.Mai ...
- MATLAB可视化实战系列(二十五)-MATLAB基于直方图的图像去雾
前言 直方图是图像的一种统计表达形式,在一定程度上能够反映数学图像的概貌性描述,包括图像的灰度范围.灰度分布.整幅图像的亮度均值.阴暗对比度等,并可以此为基础进行分析来得出对图像进一步处理的重要依据. ...
- Spring Boot2 系列教程(二十二)整合 MyBatis 多数据源
关于多数据源的配置,前面和大伙介绍过 JdbcTemplate 多数据源配置,那个比较简单,本文来和大伙说说 MyBatis 多数据源的配置. 其实关于多数据源,我的态度还是和之前一样,复杂的就直接上 ...
- Word控件Spire.Doc 转换教程(二十五):在 C#、VB.NET 中将 ODT 转换为 DOC
具有 .ODT 文件扩展名的文件是 OpenDocument 文本文档文件.这些文件通常由免费的 OpenOffice Writer 文字处理器程序创建.ODT 文件类似于与 Microsoft Wo ...
最新文章
- Improve Performance and Reduce Memory with PVRTC Textures and Cocos2d
- python分析nginx日志,每分钟nginx请求超过10ms的比例
- MySQL-mysql 8.0.11安装教程
- MATLAB reshape()函数和sub2ind()函数
- iio iio:device0: Error: xscale == 0
- JSON数据表示格式简介(JavaScript对象表示法)
- Delphi - SEH研究
- 理解 C# 项目 csproj 文件格式的本质和编译流程
- python 最优化算法库_哈工大硕士生用?Python 实现了 11 种经典数据降维算法,源代码库已开放...
- 【clickhouse】clickhouse表引擎之CollapsingMergeTree
- 设计灵感|C4D卡通角色设计作品,你想要的模型集设都有
- Introduction to Mathematical Thinking - Week 4
- json 数组 select默认选中
- JS中的算法与数据结构——排序(Sort)
- 服务器搭建docker环境的过程
- java android 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC...
- Python多线程好玩弹窗代码
- 基于java的企业人事管理系统的设计与实现(含源文件)
- 实验室设备管理系统SQL代码
- 什么是外汇期货?外汇的风险都有哪些?