2
  1. 私は MainWindow.XAML を持っています
  2. TextBox が追加されます
  3. TextBox のテキスト バインドが完了しました
  4. バインディング内 (MainWindow.XAML) に StringFormat を追加すると、機能します
  5. Style 内に StringFormat を追加すると、機能しません

以下はスタイルと 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

これで、基本的に2 つ のバインドが適用されましたText。1 つは MainWindow に、もう 1 つはStyle.

コントロールで設定されたTextプロパティは、で設定したプロパティMainWindow.xamlよりも優先されるため、Style設定StringFormatしたプロパティStyleは実際には適用されず、全体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バインディングがあるので機能します。カスタムの添付プロパティまたは DP に切り替えて、同じ動作を得ることができます。TextStyle

于 2013-07-16T22:17:19.443 に答える