programing

라벨 콘텐츠의 WPF 문자열 형식

showcode 2023. 4. 10. 22:24
반응형

라벨 콘텐츠의 WPF 문자열 형식

문자열 바인딩을 다음과 같이 포맷합니다.Amount is X어디에X는 라벨에 바인드된 속성입니다.

많은 예를 보았지만, 다음 예에서는 효과가 없습니다.

<Label Content="{Binding Path=MaxLevelofInvestment, 
   StringFormat='Amount is {0}'}" />

다음 조합도 시도해 봤습니다.

StringFormat=Amount is {0}
StringFormat='Amount is {}{0}'
StringFormat='Amount is \{0\}'

바인딩 속성의 데이터 유형을 다음과 같이 변경하려고 시도했습니다.int,string그리고.double. 아무것도 작동하지 않는 것 같습니다.이것은 매우 일반적인 사용 사례이지만 지원되지 않는 것 같습니다.

이게 잘 안 되는 이유는Label.Content속성이 유형입니다.Object,그리고.Binding.StringFormat유형의 속성에 바인딩할 때만 사용됩니다.String.

현재 상황은 다음과 같습니다.

  1. Binding당신의 복싱입니까?MaxLevelOfInvestment가치를 부여하고 저장합니다.Label.Content속성(상자 포함 10진수 값)을 지정합니다.
  2. Label 컨트롤에는 다음과 같은 템플릿이 있습니다.ContentPresenter.
  3. 부터ContentTemplate설정되어 있지 않습니다.ContentPresenter를 찾습니다.DataTemplate에 대해 정의되어 있다Decimaltype. 아무것도 찾지 못하면 기본 템플릿을 사용합니다.
  4. 에서 사용되는 기본 템플릿ContentPresenter라벨의 를 사용하여 문자열을 표시합니다.ContentStringFormat소유물.

다음의 2개의 솔루션이 가능합니다.

  • 라벨을 사용합니다.바인딩이 아닌 ContentStringFormat.String Format 또는
  • TextBlock 등의 String 속성을 사용합니다.라벨이 아닌 텍스트.내용

다음은 라벨 사용 방법입니다.Content String Format:

<Label Content="{Binding Path=MaxLevelofInvestment}" ContentStringFormat="Amount is {0}" />

TextBlock을 사용하는 방법은 다음과 같습니다.

<TextBlock Text="{Binding Path=MaxLevelofInvestment, StringFormat='Amount is {0}'}" />

주의: 알기 쉽게 하기 위해 위의 설명에서 한 가지 세부사항을 생략했습니다.ContentPresenter실제로 자신의 것을 사용하다Template그리고.StringFormat속성은 로드 중에 자동으로 템플릿에 바인딩됩니다.ContentTemplate그리고.ContentStringFormat의 속성Label그 때문에, 마치,ContentPresenter실제로 를 사용하고 있습니다.Label의 속성.

보편화하다StringFormatConverter : IValueConverter. 형식 문자열을 전달합니다.ConverterParameter.

Label Content="{Binding Amount, Converter={...myConverter}, ConverterParameter='Amount is {0}'"

또, 만들기StringFormatMultiConverter : IMultiValueConverter예를 들어 형식 문자열에 두 개 이상의 개체가 필요한 경우Completed {0} tasks out of {1}.

방금 확인했는데 어떤 이유로든 라벨과 함께 동작하지 않습니다.아마 내부적으로 ContentPresenter for Content 속성을 사용하기 때문일 것입니다.대신 TextBlock을 사용하면 됩니다.스타일이나 동작 등을 계승할 필요가 있는 경우는, 아래의 텍스트 블록 발췌를 라벨의 컨텐츠에 넣을 수도 있습니다.

<TextBlock Text="{Binding Path=MaxLevelofInvestment, StringFormat='Amount is \{0\}'} />

변환기를 사용해 보십시오.

<myconverters:MyConverter x:Key="MyConverter"/>


<Label Content="{Binding Path=MaxLevelofInvestment, Converter={StaticResource MyConverter"} />


public class MyConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return String.Format("Amount is {0}", value);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value;
    }
}

언급URL : https://stackoverflow.com/questions/4206612/wpf-stringformat-on-label-content

반응형