我正在尝试格式化绑定到TimeSpan
属性的文本块。如果该属性的类型为DateTime
,则它可以工作,但如果它是TimeSpan
类型,则它将失败。我可以用一个转换器来完成。但我正在试着找出是否有其他选择。
示例代码:
public TimeSpan MyTime { get; set; }
public Window2()
{
InitializeComponent();
MyTime = DateTime.Now.TimeOfDay;
DataContext = this;
}
Xaml
<TextBlock Text="{Binding MyTime,StringFormat=HH:mm}"/>
我期望文本块只显示小时和分钟。但它显示为:
19:10:46.8048860
发布于 2010-12-30 22:40:22
在.NET 3.5中,您可以使用MultiBinding
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}:{1}">
<Binding Path="MyTime.Hours"/>
<Binding Path="MyTime.Minutes"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
更新
回答你的评论。
为了确保即使小时或分钟为0-9也输出2位数,您可以使用{0:00}而不是{0}。这将确保时间12:01的输出是12:01,而不是12:1。
如果要将01:01输出为1:01,请使用StringFormat="{}{0}:{1:00}"
Conditional formatting可以用来去除几分钟内的负号。我们可以使用{1:00;00}代替{1:00}
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0:00}:{1:00;00}">
<Binding Path="MyTime.Hours" />
<Binding Path="MyTime.Minutes" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
发布于 2010-12-30 21:58:25
格式字符串适用于DateTime
,而不是TimeSpan
。
您可以将代码更改为使用DateTime.Now
。您的xaml很好:
<TextBlock Text="{Binding MyTime,StringFormat=HH:mm}"/>
更新
从.Net 4格式化TimeSpan
,如下所示:
<TextBlock Text="{Binding MyTime,StringFormat=hh\\:mm}"/>
发布于 2011-12-08 19:35:32
为了添加到池中,我成功地使用此绑定在一个生产WPF应用程序中显示了一个TimeSpan:
Binding="{Binding Time, Mode=TwoWay, StringFormat=\{0:h\\:mm\}}"
尝试了一些反斜杠以使其正确:)
https://stackoverflow.com/questions/4563081
复制相似问题