我的xaml代码如下,
<TextBox
Text="{Binding Path=TimeDuration,
ConverterParameter='hhmm',
Converter={StaticResource HoursMinutesTimeSpanConverter}}"/>
转换器代码,
[ValueConversion(typeof(TimeSpan), typeof(String))]
public class HoursMinutesTimeSpanConverter : IValueConverter
{
/// <summary>Converts the value into a time only formatted string.</summary>
/// <param name="value"> The value. </param>
/// <param name="targetType"> The target type. </param>
/// <param name="parameter"> The parameter. </param>
/// <param name="culture"> The culture. </param>
/// <returns>Time string value. </returns>
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return ((TimeSpan)value).ToString(parameter.ToString());
}
/// <summary>Converts the hours minutes string back to the time span value.</summary>
/// <param name="value"> The value. </param>
/// <param name="targetType"> The target type. </param>
/// <param name="parameter"> The parameter. </param>
/// <param name="culture"> The culture. </param>
/// <returns>Time string value. </returns>
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return TimeSpan.ParseExact((string)value, parameter.ToString(), CultureInfo.CurrentCulture);
}
}
工作正常。其实我需要给这个&#34; hh:mm&#34;作为转换器中正确格式化的参数。
我试过这个
ConverterParameter =&#39; hh {转义字符代码} mm&#39;为角色提供代码
(注意:我输入的方式是因为html中的代码没有反映在我的帖子中,所以为什么会这样做)
引用此link。
它不适用于我的情况。如何解决这个问题。
提前致谢。
答案 0 :(得分:3)
您可以使用此StringFormat获取该输出:
<TextBox Text="{Binding TimeDuration, StringFormat={}{0:hh}:{0:mm}, FallbackValue=00:00}" />
更新:
TimeSpan 表示时间间隔,而不是一天中的某个时间,因此始终如此 24小时格式&amp;没有
HH
的格式。然而,使用 DateTime ,
hh
将以12小时格式显示小时数 如果你想要24小时格式,你应该使用HH
。
此外,我考虑的TimeDuration类型为TimeSpan
。
答案 1 :(得分:1)
自定义TimeSpan格式说明符不包括占位符分隔符符号,例如将小时数与小时数,小时数与分数小时数或秒数与小数秒数分隔开的符号。相反,这些符号必须作为字符串文字包含在自定义格式字符串中。例如,&#34; dd.hh:mm&#34;将句点(。)定义为天和小时之间的分隔符,并将冒号(:)定义为小时和分钟之间的分隔符。
像这样使用:
Text="{Binding Path=TimeDuration,
ConverterParameter='hh\\:mm',
Converter={StaticResource HoursMinutesTimeSpanConverter}}
通过这种方式,您可以使用自己喜欢的任何分隔符。
注意:需要逃避&#39; \&#39;使用双斜杠(&#39; \\&#39;),因为ConverterParameter
值位于&#34;代码空间&#34;并遵循正常的C#字符串文字规则,而不是&#34;标记空间&#34;与问题中的link一样。
答案 2 :(得分:0)
冒号需要用反斜杠进行转义,即
TimeSpan.FromHours(5.25).ToString(@"hh\:mm")
试试这个:
/// <summary>Converts the value into a time only formatted string.</summary>
/// <param name="value"> The value. </param>
/// <param name="targetType"> The target type. </param>
/// <param name="parameter"> The parameter. </param>
/// <param name="culture"> The culture. </param>
/// <returns>Time string value. </returns>
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var escapedFormatString = parameter.replace(@":", @"\:");
return ((TimeSpan)value).ToString(escapedFormatString);
}
这应该有效:
<TextBox Text="{Binding Path=TimeDuration,
ConverterParameter='hh:mm',
Converter={StaticResource HoursMinutesTimeSpanConverter}}"/>
答案 3 :(得分:0)
应该是这样的
ConverterParameter =&#39; HH \\:毫米&#39;
字符串中有两个反斜杠。而尼基塔也表示不需要转换器。这种方法很好。