2014-11-03 3 views
0

통화 값을 표시하는 텍스트 상자가있는 창에 있습니다. 텍스트 상자에는 데이터 인터페이스의 속성에 대한 IsReadOnly 속성에 대한 바인딩이 있습니다. 텍스트 상자가 읽기 전용 모드 인 경우 천 단위 구분 기호에 £ 기호와 쉼표가있는 통화 값으로 텍스트 서식을 지정하고 싶지만 편집 모드 인 경우 똑바로 번호를 지정하고 싶습니다.WPF : 모델의 속성이 True 인 경우 조건부로 TextBox 서식 지정

StringFormat 속성은 무조건적인 옵션이 아닌 것 같습니다. Converter 속성은 희망 후보로 보이지만 IsReadOnly 속성을 ConverterParameter로 전달해야하며 ConvereterParameter가 바인딩되지 않는 것 같습니다.

이 문제를 해결하는 올바른 방법은 무엇입니까? 당신은 TextBox.Text을 변경할 수 있습니다

답변

2

StringFormat

<TextBox ...> 
    <TextBox.Style> 
     <Style TargetType="{x:Type TextBox}"> 
      <Setter Property="Text" Value="{Binding Path=MyDecimal}"/> 
      <Style.Triggers> 
       <Trigger Property="IsReadOnly" Value="True"> 
        <Setter Property="Text" Value="{Binding Path=MyDecimal, StringFormat=C2}"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </TextBox.Style> 
</TextBox> 
+0

완벽한를 사용하는이 경우 IsReadOnly=True에, 트리거를 기반으로 바인딩. 그게 잘 작동합니다 - 유일한 걸림돌은 약 50 개의 텍스트 상자를 다른 이름의 속성에 바인딩해야한다는 것입니다. 재사용 가능한 스타일로 추상화하려면이 스타일 변수의 "MyDecimal"부분을 만드는 어떤 방법을 알고 있습니까? – wwarby

+0

한 가지 방법은'TextBox'에 대한 프록시 연결 속성을 만들고'TextBox.Text'를'MyDecimal'이 아니라 'TextDouble'에 바인딩하는 것입니다. 그러나이 속성과 'Text'에 바인딩하는 대신 외부에서 연결된 동일한 속성 – dkozl

관련 문제