[c#] XAML에서 TimeSpan의 서식을 지정하는 방법


Answers

형식 문자열은 TimeSpan 아닌 DateTime 에서 작동하도록되어 있습니다.

대신 DateTime.Now 로 작업하도록 코드를 변경할 수 있습니다. 귀하의 xaml 괜찮습니다 :

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

최신 정보

그리고 .Net 4 형식의 TimeSpan 은 다음과 같습니다.

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

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}"/>

텍스트 블록에 몇 시간 만 표시 될 것으로 기대하고 있습니다. 그러나 그것은 다음과 같이 보여줍니다 :

19 : 10 : 46.8048860




다중 바인딩의 경우 .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에서 작동 하지 않으므로 결과가 비어있게됩니다.




Content 속성을 사용하는 Label에서 StringFormat을 사용하려면 ContentStringFormat 을 사용하여 timespan의 서식 을 지정할 수 있습니다.

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



StringFormat 은 형식 문자열 형식이어야합니다. 이 경우 다음과 같습니다.

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

참고 : 총 시간과 분을 표시하고 시간대가 24 시간을 초과하게하려면 접근 방법에주의해야합니다. 해결 방법이 있습니다.




Related