博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Binding.StringFormat不起作用的原理和解决
阅读量:4599 次
发布时间:2019-06-09

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

原文链接:

引出问题

我们先用一个简单的例子引出问题:有一个DateTime资源,分别用TextBox,Label显示这个DateTime。

03/29/2012 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就可以显示我们需要的结果了。

转载于:https://www.cnblogs.com/jojinshallar/articles/3285235.html

你可能感兴趣的文章
用JS掃描用戶的mouse和健盤,如果15分鍾不操作就退出
查看>>
“The Complete Reference C"读书笔记
查看>>
浅析条件竞争
查看>>
初学Java
查看>>
.NET面试题
查看>>
关于veriolg中阻塞与非阻塞赋值问题
查看>>
Jquery-css
查看>>
写Java tensorflow serving过程中学习Buffered类的Thumbnails使用
查看>>
分页技术
查看>>
Unity扩展 四种Menu的区别
查看>>
【项目 · Wonderland】需求规格说明书 · 终版
查看>>
mysql基本认识【关系型数据库和nosql、mysql操作流程和体系,库操作,表操作,数据的操作,字符集的操作,以及php作为client操作数据库】对连接本身没有疑问...
查看>>
ActiveMQ Message Groups
查看>>
[容易]落单的数
查看>>
一步步学习微软InfoPath2010和SP2010--第八章节--使用InfoPath表单Web部件(3)--参数
查看>>
python数据类型之元组
查看>>
当你输入一个网址,实际会发生什么?
查看>>
前端css
查看>>
Struts2相关问题
查看>>
phpstorm version 2016.2 License Server激活
查看>>