博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
wpf Content数据绑定StringFormat起作用的原理和解决
阅读量:6643 次
发布时间:2019-06-25

本文共 1069 字,大约阅读时间需要 3 分钟。

原文:

03/29/2016 15:05:30

TextBox按照预期的,显示了完整的英文星期,但是Label的格式没有任何改变。我们用了完全一样的Binding和格式字符串,区别究竟在什么地方?如果够细心的话可以发现,TextBox的Binding是在Text属性上进行的,而Label的Binding是在Content属性上进行的。

 

详细分析

本质原因:Control.Content是Object类型,而Binding.StringFormat仅仅在Binding的Property类型为string的时候才有效。

通过下面Label的Binding流程(来源于Stackoverflow牛人),我们可以看到底层的细节:

1. Binding把DateTime类型的值装箱,赋值给Label.Content.
2. Label的Template包含ContentPresenter,用来显示内容。
3. Label的ContentPresenter会会依次寻找ContentTemplate,DataTemplate去显示内容,当而这都没有找到的时候,它会用默认的Template。
4. ContentPresenter使用的默认Template用Label.ContentStringFormat属性去格式化object到string。
5. 注意,以上是简化的流程,本质的,ContentPresenter会用自身的Template和StringFormat显示结果,但是由于在Label控件装载过程中,会自动把Label的ContentTemplate和ContentStringFormat对应绑定到ContentPresenter的ContentTemplate和StringFormat。ContentPresenter本质会优先用Label的ContentTemplate和ContentStringFormat显示。所以,我们这里说CotentPresenter用Label的Properties做显示也没有问题。

所以,对于非String类型的Content来说,添加属性定义ContentStringFormat=dddd就可以显示我们需要的结果了。

转载地址:http://dwovo.baihongyu.com/

你可能感兴趣的文章
strus2中获取表单数据 两种方式 属性驱动 和模型驱动
查看>>
搜狗微信搜索 不用关注公众号就能在电脑查看图文消息
查看>>
windows下Emacs的安装与配置
查看>>
C socket demo
查看>>
Unity动态加载和内存管理(三合一)
查看>>
eclipse内存溢出报错:java.lang.OutOfMemoryError:Java heap space
查看>>
JS魔法堂:精确判断IE的文档模式by特征嗅探
查看>>
iOS debug release
查看>>
.NET获取不到js写的cookie解决方法
查看>>
MongoDB删除数据库
查看>>
排序(冒泡、直接插入、快速排序)
查看>>
UICollectionView 相关
查看>>
Spring MVC 简单介绍
查看>>
Valid Number leetcode java
查看>>
HBase ElasticSearch
查看>>
在html中写python代码的语法和特点-----基于webpy的httpserver
查看>>
IOS框架概览
查看>>
aehyok.com的成长之路二——技术选型
查看>>
linux中mail函数不能发送邮件怎么办
查看>>
Eclipse中设置中文件javadoc
查看>>