原文:WPF Binding ElementName方式无效的解决方法--x:Reference绑定

需求:

背景:Grid的有一个TextBlock name:T1和一个ListBox,ListBox中有两个TextBlock name:T2,T3

要求:T2的前景色绑定到T1的前景色上(其他属性同理)T3的前景色绑定到T2上

下面的代码去掉了所有不必要的内容,仅保留了两种绑定方式

<Path>
<Path.ToolTip>
<ToolTip>
<StackPanel>
<TextBlock Name="TipsTitle"/>
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Name="temp_series"
Foreground="{Binding Source={x:Reference Name=TipsTitle}, Path=Foreground}"/>
<TextBlock
Foreground="{Binding ElementName=temp_series,Path=Foreground}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</ToolTip>
</Path.ToolTip>
</Path>

x:Reference 是 XAML 2009 中引入的功能,也算是比较早的功能了;ElementName 是 XAML 一开始出现便开始有的功能。二者在使用时在感觉上是比较相似的,但多数情况下都更有优势。

本文将解释 x:Reference。

典型的使用 x:Reference 的例子是:

<object property="{x:Reference instancexName}" .../>
其中, instancexName 是另一个用 x:Name 指定名称的元素。

x:Reference 前面带了一个 x 命名空间前缀,所以可想而知这是与 x:Name 类似的 XAML 编译相关的标记。

在微软官方文档中描述为:

In WPF and XAML 2006, element references are addressed by the framework-level feature of ElementName binding. For most WPF applications and scenarios, ElementName binding should still be used. Exceptions to this general guidance might include cases where there are data context or other scoping considerations that make data binding impractical and where markup compilation is not involved.
用中文来描述就是说:以前在 XAML 2006 的时候,使用 ElementName 在绑定中获得对应到元素的绑定源,而这能适用于大多数情况。不过,如果绑定上下文中拥有不同的命名边界,那么这时使用 ElementName 可能无法找到绑定源。这时可以使用 x:Reference 替代。

你可以阅读 WPF 的 ElementName 在 ContextMenu 中无法绑定成功?试试使用 x:Reference! - walterlv 了解 x:Reference 替代 ElementName 解决绑定中命名边界的问题。

另外, ElementName 是在运行时通过查找可视化树或逻辑树来确定名称边界(NameScope)的,所以一定程度上性能也不那么好。

https://www.codercto.com/a/31458.html

WPF Binding ElementName方式无效的解决方法--x:Reference绑定的更多相关文章

  1. WPF:指定的命名连接在配置中找不到、非计划用于 EntityClient 提供程序或者无效的解决方法

    文/嶽永鹏 WPF 数据绑定中绑定到ENTITY,如果把数据文件做成一个类库,在UI文件中去应用它,可能遇到下面这种情况. 指定的命名连接在配置中找不到.非计划用于 EntityClient 提供程序 ...

  2. 表格Table宽度设置无效的解决方法

    表格Table宽度设置无效的解决方法 bootstrap中使用table时发现不管用width赋值方式都无法改变table>td的宽度 解决方法: 设置table:table-layout:fi ...

  3. WPF图片放大后模糊的解决方法

    原文:WPF图片放大后模糊的解决方法 WPF中显示图片的方式很多,可以用Image控件来显示图像,或者直接设置一个控件的Background.图片的放大也很简单,直接设置显示图片的控件的Width和H ...

  4. 设置height:100%无效的解决方法

    设置height:100%无效的解决方法 刚接触网页排版的新手,常出现这种情况:设置table和div的高height="100%"无效,使用CSS来设置height:" ...

  5. 移动端bug~~移动端:active伪类无效的解决方法【移动端 :active样式无效】

    移动端:active伪类无效的解决方法[移动端 :active样式无效]2016-09-26  15:46:50 问题: 移动端开发的时候实现按钮的点击样式变化,但是在iphone[safiri Mo ...

  6. js中style.display=""无效的解决方法

    本文实例讲述了js中style.display=""无效的解决方法.分享给大家供大家参考.具体解决方法如下: 一.问题描述: 在js中我们有时想动态的控制一个div显示或隐藏或更多 ...

  7. redhat linux enterprise 5 输入ifconfig无效的解决方法

    redhat linux enterprise 5 输入ifconfig无效的解决方法   在安装完成linux后,进入终端,输入命令行ifconfig,会提示bash: ifconfig: comm ...

  8. 排错-安装SQl 2008“为SQL Server代理服务提供的凭据无效的解决方法

    安装SQl 2008“为SQL Server代理服务提供的凭据无效的解决方法 by:授客 QQ:1033553122 在Windows Server 2008安装SQL Server 2008出现的问 ...

  9. Node.js中针对中文的查找和替换无效的解决方法

    Node.js中针对中文的查找和替换无效的解决方法.   //tags的值: tag,测试,帖子 var pos1 = tags.indexOf("测"); //这里返回-1 ta ...

随机推荐

  1. #queue队列 #生产者消费者模型

    #queue队列 #生产者消费者模型 #queue队列 #有顺序的容器 #程序解耦 #提高运行效率 #class queue.Queue(maxsize=0) #先入先出 #class queue.L ...

  2. H5C3--background中cover,背景样式,提升响应区域+精灵图的使用

    一.cover的使用 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  3. mit课程ocw-mathematics

    https://ocw.mit.edu/courses/find-by-topic/#cat=mathematics Course # Course Title Level 1.010 Uncerta ...

  4. Pycharm 2018激活(Mac版)

    第一步,修改host文件 目的:是屏蔽掉Pycharm对激活码的验证 路径:/etc/hosts 在文件最后一行添加文本: 0.0.0.0 account.jetbrains.com 修改后文件如下: ...

  5. nyoj zb的生日【背包型DFS/选or不选】

    zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么 ...

  6. 关于neo4j的嵌入式和驱动包模式该如何选择,还请解惑

    看了网上的一些资料和Neo4j权威指南这本书.与图遍历相关的介绍都是基于嵌入式模式下的java Api.但是个人觉得在实际的项目中,嵌入式的模式,代码必须放在数据库所在服务器上,且服务器的启停操作都在 ...

  7. 初探iview

    我的js功力还是TCL,太差了~ 运行iview官网例子还有它的工程文件都运行不出来.我非常感谢那些无私开源的博主,它们无私分享自己的技术,让我学到了很多东西. iview是vue的一个UI框架之一, ...

  8. golang之结构体

    Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. Go语言通过用自定义的方式形成新的类型,结构体是类型中带有成员的复合类型. Go 语言中的类型可以被实例化,使用new或&a ...

  9. rescue grub解决方案

    症状: 开机显示:GRUB loading error:unknow filesystem grub rescue> 原因: 已经发现下面几种操作会导致这种问题: 1,想删除ubuntu,于是直 ...

  10. LintCode_372 在O(1)时间复杂度删除链表节点

    题目 给定一个单链表中的表头和一个等待被删除的节点(非表头或表尾).请在在O(1)时间复杂度删除该链表节点.并在删除该节点后,返回表头. 思路 因为O(1)内删除所以 不能从头节点去遍历找他的前驱节点 ...