首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在XAML中格式化TimeSpan

如何在XAML中格式化TimeSpan
EN

Stack Overflow用户
提问于 2010-12-30 21:47:51
回答 11查看 89.3K关注 0票数 102

我正在尝试格式化绑定到TimeSpan属性的文本块。如果该属性的类型为DateTime,则它可以工作,但如果它是TimeSpan类型,则它将失败。我可以用一个转换器来完成。但我正在试着找出是否有其他选择。

示例代码:

代码语言:javascript
复制
public TimeSpan MyTime { get; set; }

public Window2()
{
    InitializeComponent();
    MyTime = DateTime.Now.TimeOfDay;
    DataContext = this;
}

Xaml

代码语言:javascript
复制
<TextBlock Text="{Binding MyTime,StringFormat=HH:mm}"/>

我期望文本块只显示小时和分钟。但它显示为:

19:10:46.8048860

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2010-12-30 22:40:22

在.NET 3.5中,您可以使用MultiBinding

代码语言:javascript
复制
<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}

代码语言:javascript
复制
<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0:00}:{1:00;00}">
            <Binding Path="MyTime.Hours" />
            <Binding Path="MyTime.Minutes" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>
票数 96
EN

Stack Overflow用户

发布于 2010-12-30 21:58:25

格式字符串适用于DateTime,而不是TimeSpan

您可以将代码更改为使用DateTime.Now。您的xaml很好:

代码语言:javascript
复制
<TextBlock Text="{Binding MyTime,StringFormat=HH:mm}"/>

更新

.Net 4格式化TimeSpan,如下所示:

代码语言:javascript
复制
<TextBlock Text="{Binding MyTime,StringFormat=hh\\:mm}"/>
票数 152
EN

Stack Overflow用户

发布于 2011-12-08 19:35:32

为了添加到池中,我成功地使用此绑定在一个生产WPF应用程序中显示了一个TimeSpan:

代码语言:javascript
复制
Binding="{Binding Time, Mode=TwoWay, StringFormat=\{0:h\\:mm\}}"

尝试了一些反斜杠以使其正确:)

票数 49
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4563081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档