c# – Label和TextBlock之间的文化差异
我一直玩
WPF一段时间,我遇到一个有趣的事情.当我将DateTime对象绑定到Label的内容时,我会看到日期的本地格式表示.但是,当我绑定到TextBlock的Text属性时,我实际上看到了英文.
看来TextBlock正在使用某种转换器,而Label只是调用ToString方法,但我不确定它. 如果是这样,为什么Label不使用转换器呢? 有人可以向我解释为什么它的运作方式呢?我提供一个简短的样本,让你们检查发生了什么: // MainWindow.xaml <Window x:Class="BindConversion.MainWindow" 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" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <StackPanel HorizontalAlignment="Center" Margin="3"> <StackPanel> <Label Content="{Binding Dt}"/> <TextBlock Text="{Binding Dt}"/> </StackPanel> </StackPanel> </Window> // MainWindow.xaml.cs using System; using System.Windows; namespace BindConversion { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public DateTime Dt { get; set; } public MainWindow() { InitializeComponent(); DataContext = this; Dt = DateTime.Now; } } } 解决方法
如果您仔细查看Label,您会看到它来自ContentControl.
ContentPresenter显示Content属性,文档中的内容如下所示: 如果有一个TypeConverter将Content类型转换为UIElement,ContentPresenter将使用该TypeConverter,并显示生成的UIElement. 现在有一个从TypeConverter继承的DateTimeConverter,以下代码片段生成与Label相同的字符串: var dateTimeConverter = new DateTimeConverter(); var convertToString = dateTimeConverter.ConvertToString(DateTime.Now); 参考文献: https://msdn.microsoft.com/en-us/library/system.windows.controls.contentpresenter(v=vs.110).aspx https://msdn.microsoft.com/en-us/library/system.componentmodel.datetimeconverter(v=vs.110).aspx (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |