项目源码

数据绑定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属性相关推荐

  1. SpringBoot 系列教程(八十五):Spring Boot使用MD5加盐验签Api接口之前后端分离架构设计

    加密算法参考: 浅谈常见的七种加密算法及实现 加密算法参考: 加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用 目的: 通过对API接口请求报文签名,后端进行验签处理, ...

  2. Java NIO系列教程(十 五)Java NIO Path

    转载自  Java NIO系列教程(十 五)Java NIO Path 译文链接  译者:章筱虎 Java的Path接口是Java NIO2 的一部分,是对Java6 和Java7的 NIO的更新.J ...

  3. SpringBoot入门建站全系列(二十六)Mongodb非关系型数据库的使用

    SpringBoot入门建站全系列(二十六)Mongodb非关系型数据库的使用 一.概述 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能 ...

  4. 推荐系统系列教程之十五:一网打尽协同过滤、矩阵分解和线性模型

    编者按:之前推出了<推荐系统系列教程>,反响不错,前面已经推出了十四期,今天按约推出第十五期:一网打尽协同过滤.矩阵分解和线性模型.希望朋友们多点"在看",多多转发,我 ...

  5. druid 手动指定数据源_Spring Boot2 系列教程(二十)整合JdbcTemplate 多数据源

    多数据源配置也算是一个常见的开发需求,Spring 和 SpringBoot 中,对此都有相应的解决方案,不过一般来说,如果有多数据源的需求,我还是建议首选分布式数据库中间件 MyCat 去解决相关问 ...

  6. WPF系列教程(十二):控件类——前景背景、字体Background、Foreground、FontFamily、FontSize

    控件都包含背景画刷和前景画刷属性. 部分控件包含字体属性. 鼠标光标的设置. 示例项目源码 为控件设置背景与前景 下面这个窗体 <Window x:Class="Control.Mai ...

  7. MATLAB可视化实战系列(二十五)-MATLAB基于直方图的图像去雾

    前言 直方图是图像的一种统计表达形式,在一定程度上能够反映数学图像的概貌性描述,包括图像的灰度范围.灰度分布.整幅图像的亮度均值.阴暗对比度等,并可以此为基础进行分析来得出对图像进一步处理的重要依据. ...

  8. Spring Boot2 系列教程(二十二)整合 MyBatis 多数据源

    关于多数据源的配置,前面和大伙介绍过 JdbcTemplate 多数据源配置,那个比较简单,本文来和大伙说说 MyBatis 多数据源的配置. 其实关于多数据源,我的态度还是和之前一样,复杂的就直接上 ...

  9. Word控件Spire.Doc 转换教程(二十五):在 C#、VB.NET 中将 ODT 转换为 DOC

    具有 .ODT 文件扩展名的文件是 OpenDocument 文本文档文件.这些文件通常由免费的 OpenOffice Writer 文字处理器程序创建.ODT 文件类似于与 Microsoft Wo ...

最新文章

  1. Improve Performance and Reduce Memory with PVRTC Textures and Cocos2d
  2. python分析nginx日志,每分钟nginx请求超过10ms的比例
  3. MySQL-mysql 8.0.11安装教程
  4. MATLAB reshape()函数和sub2ind()函数
  5. iio iio:device0: Error: xscale == 0
  6. JSON数据表示格式简介(JavaScript对象表示法)
  7. Delphi - SEH研究
  8. 理解 C# 项目 csproj 文件格式的本质和编译流程
  9. python 最优化算法库_哈工大硕士生用?Python 实现了 11 种经典数据降维算法,源代码库已开放...
  10. 【clickhouse】clickhouse表引擎之CollapsingMergeTree
  11. 设计灵感|C4D卡通角色设计作品,你想要的模型集设都有
  12. Introduction to Mathematical Thinking - Week 4
  13. json 数组 select默认选中
  14. JS中的算法与数据结构——排序(Sort)
  15. 服务器搭建docker环境的过程
  16. java android 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC...
  17. Python多线程好玩弹窗代码
  18. 基于java的企业人事管理系统的设计与实现(含源文件)
  19. 实验室设备管理系统SQL代码
  20. 什么是外汇期货?外汇的风险都有哪些?

热门文章

  1. c++11日期和时间库:chrono
  2. 为什么需要使用Wireshark工具
  3. FileUpload1上传的文件类型_控制
  4. 关于用户头像上传的配置
  5. C语言入门有哪些书籍可以参考?
  6. Scala进入paste模式方法
  7. PPTP 在Centos 7.1 建立方法与失效处理
  8. 2023全国职业技能大赛“信息安全管理与评估”-数字取证解析(高职组)
  9. Android 休眠状态对Camera预览的影响
  10. 小朵机器人安卓叫什么_义乌小朵机器人儿童智能机器人