TextBox文本格式从样式

时间:2013-07-16 22:01:56

标签: wpf styles

  1. 我有一个MainWindow.XAML
  2. TextBox已添加到其中
  3. TextBox文本绑定已完成
  4. 当我在绑定中添加StringFormat(在MainWindow.XAML中)时,它可以正常工作
  5. 当我在Style中添加StringFormat时,它无法正常工作
  6. 下面是style和MainWindow.xaml的代码

    <TextBox Grid.Row="1" Grid.Column="4"   Style="{StaticResource TextBoxStyle}" Text="{Binding CustomerAmount,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" HorizontalAlignment="Stretch" Margin="10,0,0,0"/>
    
    
    <Style  x:Key="TextBoxStyle"   TargetType="{x:Type TextBox}" >
            <Setter Property="Text" Value="{Binding Text, RelativeSource={RelativeSource Self},StringFormat='#,###,###,##0.00;(#,###,###,##0.00)'}"></Setter>
        </Style>
    

1 个答案:

答案 0 :(得分:4)

您现在基本上已经应用了两个 Text绑定,一个在MainWindow,另一个在Style

控件上Text设置的MainWindow.xaml属性优先于您在Style中设置的属性,因此StringFormat通过Style设置实际上从未应用cos,忽略整个Style.Setter

一种非常粗略的方法来完成这项工作并证明上述声明是尝试将您的xaml切换到以下内容,

<TextBox Grid.Row="1" Grid.Column="4"   Style="{StaticResource TextBoxStyle}" Tag="{Binding CustomerAmount,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" HorizontalAlignment="Stretch" Margin="10,0,0,0"/>

和风格:

<Style x:Key="TextBoxStyle"
        TargetType="{x:Type TextBox}">
  <Setter Property="Text"
          Value="{Binding Tag,
                          RelativeSource={RelativeSource Self},
                          StringFormat='#,###,###,##0.00;(#,###,###,##0.00)',
                          Mode=TwoWay,
                          UpdateSourceTrigger=PropertyChanged}" />
</Style>

这将有效,因为您现在在MainWindow中绑定了Tag,在Text中绑定了Style。您可以切换到自定义附加属性或DP以获得相同的行为