c# - 如何将毫秒转换为显示mm :ss in XAML?

标签 c# wpf string-formatting time-format

我想我需要为此使用 StringFormat,但我不知道如何找出格式。

最佳答案

如果您的输入值是 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 中。

然后你可以绑定(bind)到转换器,像这样:

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

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

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

关于c# - 如何将毫秒转换为显示mm :ss in XAML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10372114/

相关文章:

c# - 提取 .avi 文件的帧

c# - BackgroundWorker 不与 TeamCity NUnit runner 一起工作

c# - 在 C++ 中允许的函数在 C# 中不允许?

c# - 是否可以在 XAML 中绑定(bind) Canvas 的 Children 属性?

java - 格式化字符串时%df代表什么?

c# - 如何获得字符串操作?

c# - 在 C# 中显示数据库 MySQL 中的数据被删除时的状态

c# - 用于基于选项卡控件的应用程序的 MVVM

wpf - 如何将WPF选项卡项标题扩展到父控件宽度

excel - 使用公式设置 Excel 单元格中文本子集的格式