如何在 XAML 元素中使用 StringFormat?
Posted
技术标签:
【中文标题】如何在 XAML 元素中使用 StringFormat?【英文标题】:How to use StringFormat in XAML elements? 【发布时间】:2009-03-26 13:19:06 【问题描述】:我对绑定到订单的元素的 XAML 堆栈很感兴趣。
订单日期显示为例如“2008 年 12 月 31 日上午 12:00:00”。
我希望它显示为例如“2008 年 12 月 31 日”。
我该怎么做?我看到other *** questions 提到了 StringFormat,但他们以我无法开始工作的方式使用多重绑定。
这是我想要的那种语法(这是伪代码),只需在需要的地方指定 StringFormat,这可能吗?
<StackPanel>
<ListView ItemsSource="Binding Orders">
<ListView.View>
<GridView>
<GridViewColumn
Header="Order ID"
DisplayMemberBinding="Binding Path=OrderID"
StringFormat="1:dd.MM.yyyy"/>
<GridViewColumn
Header="Order Date"
DisplayMemberBinding="Binding Path=OrderDate"/>
</GridView>
</ListView.View>
</ListView>
</StackPanel>
【问题讨论】:
【参考方案1】:我还没有测试过,但我认为这应该可以工作:
<GridViewColumn
Header="Order Date"
DisplayMemberBinding=
"Binding Path=OrderDate, StringFormat='0:dd.MM.yyyy'"/>
【讨论】:
您可以在字符串的任一侧附加文本,例如"开始日期:0:dd-MM-yyyy" 我不得不从 StringFormat 值中去掉单引号。 从头开始,我最终无法让我的 StringFormat 得到尊重,不得不切换到 ContentStringFormat。【参考方案2】:通常,您可以查找关联的*StringFormat
依赖属性。例如,所有ContentControl 实现(例如Label 和Tooltip)都有ContentStringFormat dependency property:
<Label
Content="Binding Path=DateAsked"
ContentStringFormat="0:yyyy/MM/dd HH:mm:ss" />
在您的情况下,虽然 GridViewColumn 具有与 Header
一起使用的 HeaderStringFormat dependency property,但 DisplayMemberBinding
没有类似物,因此您将需要 .NET 3.5 SP1(使用 Visual Studio 2008 SP1 获取它) 或更好地使用新的BindingBase.StringFormat Property:
<GridViewColumn
Header="Order ID"
DisplayMemberBinding="Binding Path=OrderID, StringFormat='0:dd.MM.yyyy'"
/>
在博文Trying out Binding.StringFormat 中有更多示例。
【讨论】:
我喜欢这个。甚至不知道 ContentStringFormat。给我一些想法。【参考方案3】:XAML
<UserControl.Resources>
<myNamespace:DateTimeConverter x:Key="DateTimeConverter" />
</UserControl.Resources>
<GridViewColumn
DisplayMemberBinding=="Binding Path=OrderDate, Converter=StaticResource DateTimeConverter"
/>
C#
public class DateTimeConverter : IValueConverter
public object Convert(object value,
Type targetType,
object parameter,
CultureInfo culture)
if (value != null)
return ((DateTime)value).ToString("dd.MM.yyyy");
else
return String.Empty;
public object ConvertBack(object value,
Type targetType,
object parameter,
CultureInfo culture)
return DateTime.Parse(value.ToString());
【讨论】:
经过数小时搜索我如何获得ConverterCulture=x:Static sysglb:CultureInfo.CurrentUICulture"
of 其他答案的运行后,我以您的解决方案结束。【参考方案4】:
如果您想本地化日期格式,您可以将其包含在您的 .resx 文件中。您必须按照以下指南设置您的应用程序进行本地化:https://developer.xamarin.com/guides/xamarin-forms/advanced/localization/。
resx 条目:
<data name="DateFormat" xml:space="preserve">
<value>0:dddd d MMMM H:mm</value>
</data>
然后在您的内容页面中包含 resx 文件的位置
xmlns:il8n="clr-namespace:MyProject.Localization;assembly=MyProject"
然后你可以像这样在你的绑定中使用它:
<Label
Text = "Binding Time, StringFormat=il8n:Translate DateFormat"
【讨论】:
以上是关于如何在 XAML 元素中使用 StringFormat?的主要内容,如果未能解决你的问题,请参考以下文章
如何创建一个接受在 XAML 中添加子元素的 UserControl