2014-11-03 53 views
0

我有一個窗口上的文本框,它顯示了一個貨幣值。該文本框將其IsReadOnly屬性綁定到datacontext上的屬性。如果文本框處於只讀模式,我想將其中的文本格式化爲貨幣值,使用£符號和千位分隔符的逗號,但是如果它處於編輯模式,我希望它是一個直線數字。WPF:條件格式的文本框,如果模型上的屬性爲真

StringFormat屬性似乎不是一個選項,因爲它是無條件的。 Converter屬性看起來像是一個充滿希望的候選人,但我需要通過IsReadOnly屬性作爲ConverterParameter,而ConvereterParameter似乎並不想被綁定。

解決此問題的正確方法是什麼?

回答

2

您可以更改綁定TextBox.Text基於觸發器,在這種情況下IsReadOnly=True使用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

完美。這工作得很好 - 唯一的障礙是我必須做大約50個文本框綁定到不同名稱的屬性。如果我想將它抽象成可重用的樣式,你知道有什麼方法可以使這個樣式變量的「MyDecimal」部分變成可變的嗎? – wwarby 2014-11-03 14:57:47

+0

一種方法是爲'TextBox'創建一些代理附加屬性,並將'TextBox.Text'不綁定到'MyDecimal',而是綁定到該屬性,而不是綁定到'Text'綁定相同的附加屬性 – dkozl 2014-11-03 15:01:25

相關問題