- 我有一个主窗口.XAML
- TextBox已添加到其中
- TextBox文本绑定已完成
- 当我在绑定中(在MainWindow.XAML中)添加StringFormat时,它就起作用了
- 当我在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>
现在基本上已经应用了两个Text
绑定,一个在MainWindow中,一个是在Style
中。
控件的MainWindow.xaml
中设置的Text
属性优先于您在Style
中设置的属性,因此您通过Style
设置的StringFormat
实际上从未应用,因为整个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
绑定,在Style
中有Text
绑定。您可以切换到自定义的Attached属性或DP以获得相同的行为