programing

WPF 바인딩 문자열 포맷 쇼트 날짜 문자열

closeapi 2023. 4. 11. 22:03
반응형

WPF 바인딩 문자열 포맷 쇼트 날짜 문자열

WPF에서 Short Date라는 이름의 문자열 형식을 사용하고 싶습니다.

나는 다음과 같이 시도했다.

<TextBlock Text="{Binding Date, StringFormat='Short Date'}" />

이거 어떻게 하는 거야?

이것을 시험해 보세요.

<TextBlock Text="{Binding PropertyPath, StringFormat=d}" />

문화적으로 민감하고 필요합니다.NET 3.5 SP1 이후

메모: 대소문자를 구분합니다."d"는 짧은 날짜 형식 지정자이고, "D"는 긴 날짜 형식 지정자입니다.

표준 날짜 및 시간 형식 문자열의 MSDN 페이지에 문자열 형식의 전체 목록과 이 MSDN 블로그 게시물의 모든 옵션에 대한 자세한 설명이 있습니다.

단, 이것에는 하나의 gotcha가 있습니다.그것은 문화를 올바른 값으로 설정하지 않는 한 항상 미국 형식으로 날짜를 출력합니다.

이 속성을 설정하지 않으면 바인딩 엔진은 바인딩 대상 개체의 언어 속성을 사용합니다.XAML 에서는, 디폴트로 「en-US」가 됩니다.또, 명시적으로 설정되어 있는 경우는, 페이지의 루트 요소(또는 임의의 요소)로부터 값을 상속합니다.

원천

이를 위한 한 가지 방법은 뒤에 있는 코드에 있습니다(스레드의 문화를 올바른 값으로 설정했다고 가정합니다).

this.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name);

다른 방법은 바인딩에서 컨버터 문화를 설정하는 것입니다.

<TextBlock Text="{Binding PropertyPath, StringFormat=d, ConverterCulture=en-GB}" />

다만, 이것은 출력의 현지화를 허가하지 않습니다.

또는 영어(또는 커스텀의 경우 혼합) 형식의 경우 다음과 같이 사용합니다.

StringFormat='{}{0:dd/MM/yyyy}'

를 사용합니다.StringFormat속성(또는ContentStringFormatContentControl및 파생 모델(예:Label).

<TextBlock Text="{Binding Date, StringFormat={}{0:d}}" />

주의:{}표준보다 앞서서String.Formatpositional 인수 표기법을 사용하면 마크업 확장 언어로 중괄호를 이스케이프할 수 있습니다.

유용한 DateTime StringFormat 샘플이 몇 개 있습니다.C#에서 꺼낸 예

DateTime dt = new DateTime(2008, 3, 9, 16, 5, 7, 123);

String.Format("{0:y yy yyy yyyy}", dt);  // "8 08 008 2008"   year
String.Format("{0:M MM MMM MMMM}", dt);  // "3 03 Mar March"  month
String.Format("{0:d dd ddd dddd}", dt);  // "9 09 Sun Sunday" day
String.Format("{0:h hh H HH}",     dt);  // "4 04 16 16"      hour 12/24
String.Format("{0:m mm}",          dt);  // "5 05"            minute
String.Format("{0:s ss}",          dt);  // "7 07"            second
String.Format("{0:f ff fff ffff}", dt);  // "1 12 123 1230"   sec.fraction
String.Format("{0:F FF FFF FFFF}", dt);  // "1 12 123 123"    without zeroes
String.Format("{0:t tt}",          dt);  // "P PM"            A.M. or P.M.
String.Format("{0:z zz zzz}",      dt);  // "-6 -06 -06:00"   time zone

문자열 형식의 단일 따옴표에 주의하십시오.이것은 동작하지 않습니다.

    Content="{Binding PlannedDateTime, StringFormat={}{0:yy.MM.dd HH:mm}}"

단, 다음과 같습니다.

    Content="{Binding PlannedDateTime, StringFormat='{}{0:yy.MM.dd HH:mm}'}"

사용방법:

<TextBlock Text="{Binding Date, StringFormat=\{0:d\}}" />

값을 포함한 문자열을 추가하려면 다음 명령을 사용합니다.

<TextBlock Text="{Binding Date, StringFormat= 'Date : {0:d}'}" />

크리스의 답변에 덧붙이자면, 저는 저만의 심플함을 구현합니다.CultureAwareBinding다음과 같이 합니다.

public class CultureAwareBinding : Binding
{
    public CultureAwareBinding()
    {
        ConverterCulture = CultureInfo.CurrentCulture;
    }
}

XAML에서는 다음과 같이 사용합니다.

<TextBlock 
    Text="{viewHelpers:CultureAwareBinding Path=ActivationDate, StringFormat=d}"/>

이 경우,CultureAwareBinding에 상주하다viewHelpersxmlns.

이 방법으로, 나는 이 모든 것이StringFormat=d올바른 것을 사용하고 있다CultureInfo시스템입니다.

언급URL : https://stackoverflow.com/questions/5046429/wpf-binding-stringformat-short-date-string

반응형