[Wpf] كيفية تنسيق تيمسبان في زمل


Answers

تم تصميم سلسلة التنسيق للعمل على TimeSpan وليس TimeSpan .

هل يمكن تغيير التعليمات البرمجية للعمل مع DateTime.Now بدلا من ذلك. زمل الخاص بك على ما يرام:

<TextBlock Text="{Binding MyTime,StringFormat=HH:mm}"/>

تحديث

ومن .Net 4 شكل TimeSpan كما يلي:

<TextBlock Text="{Binding MyTime,StringFormat=hh\\:mm}"/>
Question

أحاول تنسيق نص تكستبلوك الذي يرتبط TimeSpan . يعمل إذا كان الخاصية من نوع TimeSpan لكنه فشل إذا كان TimeSpan . يمكنني الحصول عليه القيام به باستخدام محول. ولكني أحاول معرفة ما إذا كان هناك أي بدائل.

عينة من الرموز:

public TimeSpan MyTime { get; set; }

public Window2()
{
    InitializeComponent();
    MyTime = DateTime.Now.TimeOfDay;
    DataContext = this;
}

XAML

<TextBlock Text="{Binding MyTime,StringFormat=HH:mm}"/>

أنا أتوقع أن تكستبلوك لإظهار ساعات فقط و مينتس. لكنه يظهر كما يلي:

19: 10: 46.8048860




إذا كنت ترغب في استخدام سترينغفورمات في تصنيف يستخدم خاصية كونتنت، يمكنك استخدام كونتنتسترينغفورمات لتنسيق تيمسبان الخاص بك:

<Label Content={Binding MyTimespan}" ContentStringFormat="{}{0:hh}:{0:mm}:{0:ss}"



يجب أن يكون StringFormat في شكل سلسلة تنسيق. في هذه الحالة سيبدو كما يلي:

<TextBlock Text="{Binding MyTime,StringFormat=`Time values are {0:hh\\:mm}`}"/>

ملاحظة: إذا كنت ترغب في عرض إجمالي عدد الساعات والدقائق وتوقيت زمني أن يكون أكبر من 24 ساعة، وهناك تحذير مع النهج الخاص بك: وهنا الحل .




أنا على علم بأن هذا السؤال هو القديم الآن، ولكن أنا مندهش أن لا أحد اقترح هذا StringFormat بسيطة والتي سوف تعمل على TimeSpan مباشرة:

<TextBlock Text="{Binding MyTime, StringFormat={}{0:hh}:{0:mm}, FallbackValue=00:00}"/>