Я хотел бы иметь TextBox
, отображающий число в формате валюты (путем установки StringFormat=c
в привязке). Когда выбран TextBox
(когда IsKeyboardFocused==true
), я бы хотел, чтобы форматирование исчезло, пока фокус на TextBox
не будет потерян.
Я нашел способ сделать это, код вставлен ниже. Моя проблема заключается в том, что привязка указана внутри Style
- это означает, что я должен перепечатать стиль для каждого TextBox
, для которого я хочу это сделать. В идеале я хотел бы поместить стиль где-нибудь в центре и повторно использовать его для каждого TextBox
с разными целями привязки для каждого.
Есть ли способ, используя Style
, установить параметр существующей привязки, что-то вроде Text.Binding.StringFormat=""
? (В отличие от установки всего значения Text на вновь определенную привязку)
Другие предложения для достижения этого также будут оценены.
Код (это работает, просто неудобно):
<TextBox x:Name="ContractAmountTextBox">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsKeyboardFocused, ElementName=ContractAmountTextBox}" Value="False">
<Setter Property="Text" Value="{Binding Path=ContractAmount, UpdateSourceTrigger=LostFocus, StringFormat=c}"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsKeyboardFocused, ElementName=ContractAmountTextBox}" Value="True">
<Setter Property="Text" Value="{Binding Path=ContractAmount, UpdateSourceTrigger=LostFocus}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>