Я хотел бы показать текстовое поле «дополнительные сведения», когда предыдущее значение TextBox
не равно 0,00 (нулю). Это легко сделать с помощью DataTriggers:
<TextBox Name="FirstTB" Text="{Binding Amount, StringFormat=F2}"/><!--when this TB is not 0-->
<TextBox Name="SecondTB"> <!--show this TB-->
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding Amount}" Value="0">
<Setter Property="Visibility" Value="Hidden"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
<TextBox Name="ThirdTB"/>
Однако проблема заключается в том, что при изменении значения FirstTB
на <> 0 и нажатии Tab
фокус переходит на ThirdTB вместо SecondTB (хотя SecondTB
теперь виден из-за DataTrigger). Как я могу исправить эту проблему?
К сожалению, UpdateSourceTrigger=PropertyChanged
не представляется опцией из-за вмешательства в StringFormat
s - он дает ужасный UX при редактировании значения, carretпрыгает как сумасшедший из-за постоянной оценки StringFormat. Модель представления, использованная в примере выше:
public class MyVM : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private double _amount;
public double Amount
{
get { return _amount; }
set
{
_amount = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Amount)));
}
}
}