[C#] كيفية تنسيق TimeSpan في XAML



Answers

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

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

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

تحديث

ومن .Net 4 تنسيق TimeSpan النحو التالي:

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

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

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

public TimeSpan MyTime { get; set; }

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

XAML

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

أتوقع أن يظهر النص فقط ساعات و mintes. ولكنها تظهر على النحو التالي:

19: 10: 46.8048860




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

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

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




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

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



بالنسبة إلى عمليات الربط المتعددة ، يجب أن تنتبه منذ استخدام .NET 4.

نظرة عامة قصيرة أدناه ، تم اختبارها باستخدام .NET 4.6:

الربط العادي:

<TextBlock Text="{Binding Start, StringFormat='{}{0:hh\\:mm\\:ss}'}" />

ملزمة متعددة:

<TextBlock.Text>
    <MultiBinding StringFormat="{}{0:hh':'mm':'ss} -> {1:hh':'mm':'ss}">
        <Binding Path="Start" Mode="OneWay" UpdateSourceTrigger="PropertyChanged" />
        <Binding Path="End" Mode="OneWay" UpdateSourceTrigger="PropertyChanged" />
    </MultiBinding>
</TextBlock.Text>

أو يمكنك استخدام " بدلاً من " في الأجزاء المتعددة:

<MultiBinding StringFormat='{}{0:hh":"mm":"ss} -> {1:hh":"mm":"ss}'>

ملاحظة: باستخدام StringFormat = "{} {0: hh \: \: mm \: ss} -> {1: hh \: mm \: ss}" لن يعمل على MultiBinding ، سيؤدي ذلك إلى نتيجة فارغة.




Links