用于在XAML中绑定TimeSpan的StringFormat不起作用

时间:2013-11-25 11:54:28

标签: c# wpf xaml

我有一个名为Time的TimeSpan变量,我设法在XAML中成功绑定。这是我的代码:

...
<TextBlock Grid.Column="2" Text="{Binding Time, StringFormat='{}{0:hh:mm}'}" />
...

现在可以正确显示这些值,但格式仍为hh:mm:ss。我试图摆脱秒并只显示小时和分钟,但由于某种原因,我对StringFormat所做的更改没有考虑到,我总是得到相同的hh:mm:ss格式。你能告诉我吗?

谢谢!

修改

根据下面的评论判断,我绑定的时间似乎不是TimeSpan格式,因为StringFormat似乎是正确的,但显示的值是错误的。 Time变量在自定义类Record:

中定义如下
        private TimeSpan time;
        public TimeSpan Time
        {
            get { return time; }
            set { time = value; }
        }

在我的代码中,我定义了一个可观察的集合:

ObservableCollection<Record> records = new ObservableCollection<Record>();

该集合是填充的,然后我有:

listBoxRecords.ItemsSource = this.records;

这是完整的XAML,请记住其余字段已正确填充,只有TimeSpan给我带来麻烦:

<ListBox Margin="0,44,0,58" Name="listBoxRecords" ItemsSource="{Binding records}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid Margin="4">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="120" />
                            <ColumnDefinition Width="85" />
                            <ColumnDefinition Width="55" />
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="{Binding Date, StringFormat='{}{0:dd-MM-yyyy HH:mm}'}" />
                        <TextBlock Grid.Column="1" Text="{Binding Type }" />
                        <TextBlock Grid.Column="2" Text="{Binding Time, StringFormat='{}{0:hh\\:mm}'}" />
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

6 个答案:

答案 0 :(得分:8)

您可以使用此StringFormat

获取该输出
<TextBlock Text="{Binding Time, StringFormat={}{0:hh}:{0:mm}, FallbackValue=00:00}" />

更新&gt;&gt;&gt;

我想说的第一点是,hh将以12小时格式显示小时数,如果您需要24小时格式,则应使用HH

我想提出的第二点是,您对申请中的内容感到困惑。您使用秒值看到的时间值不是来自此TextBlock ,也可能不是来自您的那个。我认为您需要仔细查看您的代码......您必须还有其他TextBlock或其他内容。

答案 1 :(得分:6)

通过将:更改为:

,尝试转义StringFormat
StringFormat='{}{0:hh\\:mm}'

答案 2 :(得分:5)

所提出的答案都不适合我,它们都会产生绑定错误。 我最终制作了一个示例应用来测试MSDN: Custom TimeSpan Format Strings

上找到的每种可能的字符串格式

我从此测试中发现,只有以%开头的TimeSpan部分(例如%d for Days)在WPF StringFormat属性中工作。

试试这个,它对我有用:

<TextBlock
    Text="{Binding Path=Time,
        StringFormat={}{0:%d} days {0:%h} hours {0:%m} minutes,
        FallbackValue=0 days 0 hours 0 minutes}" />

答案 3 :(得分:2)

对于那些对程序化方法感兴趣的人,这对我有用:

        {
            DataGridTextColumn dgtc = new DataGridTextColumn();
            dgtc.Header = "End Time";
            dgtc.Binding = new Binding("EndTime");
            dgtc.Binding.StringFormat = "{0:hh}:{0:mm}";
            ScheduleGrid.Columns.Add(dgtc);
        }

答案 4 :(得分:1)

用这个问题搜索了许多线程,我发现: 从2019年7月4日开始,这对于Xamarin形式的XAML适用于我:

Text="{Binding myTimeSpan, StringFormat=\{0:h\\:mm\\:ss\}, FallbackValue=00:00:00}

以小时,分钟,秒为单位显示时间:

1小时23分9秒= 1:23:09

答案 5 :(得分:0)

.net 4中的可用时间范围

    <TextBlock Grid.Column="2" Text="{Binding Time, StringFormat=hh\\:mm\\:ss}" />

关于蒂姆·劳埃德的回答     How to format TimeSpan in XAML

将其标记为答案。

致谢