我有一个名为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>
答案 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
将其标记为答案。
致谢