2012-04-29 57 views

回答

6

如果您的輸入值是TimeSpan或DateTime,那麼您可以使用簡單的格式字符串。 但我認爲情況並非如此。

據我所知,你需要實現你自己的Converter,它將把你的值作爲參數,並輸出一個格式化的字符串。 標準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)

+1

更好的是,在ConvertBack方法中返回Binding.DoNothing。 – 2012-04-29 13:06:37

+1

謝謝,這正是我需要知道的! – Kuraj 2012-04-29 13:10:02

+0

非常歡迎您! – 2012-04-29 13:21:38

1

如果你不想創建轉換器,你也可以做:

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

時間可能是你的代碼背後的一個屬性。或者你也可以把它綁定到別的東西..

There is more examples in here.

+0

對不起,但格式字符串不正確。 正確的是: 2012-09-24 16:32:18

+0

只是爲了增加另一種可能性'StringFormat = \ { dd-MM-yyyy hh:mm:ss.fff tt \}' – XAMlMAX 2017-05-16 09:58:13