2
  1. 我有一个 MainWindow.XAML
  2. 文本框被添加到它
  3. TextBox 文本绑定完成
  4. 当我在绑定中(在 MainWindow.XAML 中)添加 StringFormat 时,它可以工作
  5. 当我在 Style 中添加 StringFormat 时,它不起作用

下面是 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>
4

1 回答 1

4

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

控件上设置的Text属性MainWindow.xaml优先于您设置的属性Style,因此StringFormat您设置的 viaStyle实际上永远不会应用,因为整个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>

这将起作用,因为您现在在TagMainWindow 和Text. Style您可以切换到自定义附加属性或 DP 以获得相同的行为

于 2013-07-16T22:17:19.443 回答