3

我想我需要为此使用 StringFormat ,但我对如何找出格式一无所知。

4

2 回答 2

6

如果您的输入值是 TimeSpan 或 DateTime,那么您可以使用简单的格式字符串。但我认为情况并非如此。

据我所知,您需要实现自己的转换器,它将您的值作为参数,并输出格式化的字符串。标准 C 格式化程序无法进行实际计算,例如计算分钟所需的模数。

一个例子:(这段代码没有被检查,而是即时编写的!)

public class MmSsFormatConverter : IValueConverter
{
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        Int32 sss = (Int32)value;
        Int32 ss = sss / 1000;
        Int32 mm = ss / 60;
        ss = ss % 60;
        return string.Format(@"{0:D2}:{1:D2}", mm, ss);
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return Binding.DoNothing; // Thanks to Danny Varod for the suggestion!
    }

    #endregion
}

现在将命名空间添加到 XAML,以识别转换器,然后将转换器添加为 XAML 中的资源。

然后您可以绑定到转换器,如下所示:

<TextBlock Text="{Binding Milliseconds, Converter={StaticResource MmSsFormatConverter}}" />

请注意,如果您进行双向绑定,则需要实现该 ConvertBack 函数。您还可以使用参数参数来传递 ConverterParameter,如格式字符串。

您可能想在我编写的代码上添加类型检查和其他约束。(超过59:59的情况呢?现在到60:00,事件可以到123:59)

于 2012-04-29T12:47:20.533 回答
1

如果您不想创建转换器,您也可以这样做:

    <TextBox Height="23" Text="{Binding Time, StringFormat={}{0:mm:ss}}" />

时间可能是您背后代码中的一个属性。或者你可以将它绑定到其他东西..

这里有更多的例子。

于 2012-04-29T15:08:04.230 回答