1.简单示例:

<Window x:Class="WpfOne.Bind.Bind6"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfOne.Bind"xmlns:sys="clr-namespace:System;assembly=mscorlib"mc:Ignorable="d"Title="Bind6" Height="300" Width="300"><Grid><!--引入mscorlib程序集下的System命名空间xmlns:sys="clr-namespace:System;assembly=mscorlib"--><Grid.Resources><sys:DateTime x:Key="DateTime001">03/29/2016 15:05:30</sys:DateTime></Grid.Resources><TextBox Text="{Binding Source={StaticResource DateTime001},StringFormat=dddd , Mode=OneWay}"Height="23" HorizontalAlignment="Left" Margin="28,68,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" /><Label Content="{Binding Source={StaticResource DateTime001}, StringFormat=dddd, Mode=OneWay}" Height="28" HorizontalAlignment="Left" Margin="28,26,0,0" Name="label1" VerticalAlignment="Top" /></Grid>
</Window>

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://www.cnblogs.com/KeithWang/archive/2012/03/29/2423572.html

转载于:https://www.cnblogs.com/tianma3798/p/5759814.html

wpf Content数据绑定StringFormat起作用的原理和解决(转)相关推荐

  1. 【原创】uC/OS 中LES BX,DWORD PTR DS:_OSTCBCur的作用及原理

    1 LES BX, DWORD PTR DS:_OSTCBCur ;OSTCBCur->OSTCBStkPtr = SS:SP!!! 2 MOV ES:[BX+2], SS ;将当前SS(栈的基 ...

  2. volatile关键字的作用、原理

    在只有双重检查锁,没有volatile的懒加载单例模式中,由于指令重排序的问题,我确实不会拿到两个不同的单例了,但我会拿到"半个"单例. 而发挥神奇作用的volatile,可以当之 ...

  3. Bundler 的作用及原理

    Bundler 的作用及原理 翻译 · yesmeck · Created at one year ago · Last by teacafe2000 Replied at one year ago  ...

  4. JAVA基础加强(张孝祥)_类加载器、分析代理类的作用与原理及AOP概念、分析JVM动态生成的类、实现类似Spring的可配置的AOP框架...

    1.类加载器 ·简要介绍什么是类加载器,和类加载器的作用 ·Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader ...

  5. Batch Normalization的作用及原理

    目录 声明 BN是什么[1] 为什么提出BN[1, 2] BN的作用及原理 加速训练,提高收敛速度[1] 缓解梯度消失(梯度爆炸)[3] 缓解过拟合[4] 其他相关问题 BN和激活函数的顺序问题[5] ...

  6. Vue 响应式原理(双向数据绑定) 怎样实现 响应式原理?

    Vue 响应式原理(双向数据绑定) 怎样实现 响应式原理? 我们在Vue里面,定义在Data里的属性,叫做响应式属性. 每一个vue组件被创建的时候,同时还有一个对象被创建出来了,这个对象我们是看不到 ...

  7. YouTube怎么判断影片内含侵权内容? 解析Content ID内容识别系统的原理及功能

    你有没有发现YouTube上有许多没有声音,或是画面翻转的影片? 这些主要都是为了逃避YouTube全自动的内容识别系统 (Content ID)监测. YouTube为了保护版权影片,发展出这一套强 ...

  8. python super()方法的作用_详解python的super()的作用和原理

    Python中对象方法的定义很怪异,第一个参数一般都命名为self(相当于其它语言的this),用于传递对象本身,而在调用的时候则不必显式传递,系统会自动传递.uz0免费资源网 今天我们介绍的主角是s ...

  9. 主从复制面试之作用和原理

    主从复制面试之作用和原理 有些同学连集群和主从都分不清楚的,这里我说一下他们最本质的区别,其实也就是data-sharing和nothing-sharing的区别.集群是共享存储的.主从复制中没有任何 ...

  10. Java之String系列--intern方法的作用及原理

    原文网址:Java之String系列--intern方法的作用及原理_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Java的String的intern方法的原理. 常量池简介 在 JAVA 语言中 ...

最新文章

  1. linux 构建 无线网络 过程
  2. CSS Variables
  3. sys.modules[__name__]的一个实例
  4. SpringCloud工作笔记062---APP消息推送_个推平台API使用经验
  5. 代替Reflection(反射)的一些方法(转)
  6. Boost 库Program Options--第二篇
  7. Java后端开发学习路线:一文串起所有主流技术点
  8. Redis下载安装与配置(windows)
  9. Linux下定时备份数据库
  10. flex:1属性是什么意思
  11. #17-【二分】gdgzoi::比赛.Contest2281.Problem D (包裹快递)(zly#1)
  12. 【转】TinyXML2 入门教程
  13. excel同一行中如何添加换行
  14. oracle 导出数据库和导入数据库
  15. [纯代码] Swift+UIKit · 搭建第一个iOS APP项目
  16. 免费使用谷歌的深度学习云服务
  17. 实现数智内控,数据分析创造价值——辽宁烟草智能风险体检系统
  18. Docker容器Removal In Progress删除方案
  19. day21Java-常用对象网络编程Socket-TCP协议
  20. 快速入门GORM,使用GORM进行CURD

热门文章

  1. UOS U盘复制性能,3M
  2. 代码中,对象类与管理类要分开
  3. LINUX开发FIREFOX的插件:编译npruntime
  4. 谈谈纽微特3万SIP奖金的事
  5. 订阅机票时要注意的几个教训
  6. SmartSVN报错format的解决办法
  7. java int 原子_java中的原子操作类AtomicInteger及其实现原理
  8. 软件系统换服务器地址,软件系统换服务器地址
  9. oracle授权with,Oracle With 语句语法及示例
  10. gcc详解以及静态,动态库的生成 1