WPF:如果模型上的属性为True,则有条件地格式化TextBox

时间:2014-11-03 14:25:31

标签: c# wpf xaml binding

我在窗口上有一个文本框,显示货币值。文本框将itReadOnly属性绑定到datacontext上的属性。如果文本框处于只读模式,我想将其中的文本格式化为货币值,千位分隔符使用£符号和逗号,但如果它处于编辑模式,我希望它是一个直接数字。

StringFormat属性似乎不是一个选项,因为它是无条件的。 Converter属性似乎是一个有希望的候选者,但我需要将IsReadOnly属性作为ConverterParameter传递,并且ConvereterParameter似乎不想被绑定。

解决这个问题的正确方法是什么?

1 个答案:

答案 0 :(得分: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>