当前一个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
干扰而似乎不是一个选项-在编辑值时它提供了糟糕的UX,由于对StringFormat的不断评估,carret像疯了似的跳来跳去。上例中使用的Viewmodel: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)));
}
}
}
private void SecondTB_OnIsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (((bool) e.NewValue))
{
if(!(sender is TextBox txbx)) return;
ThirdTB.GotFocus += ThirdTbOnGotFocus;
}
}
private void ThirdTbOnGotFocus(object sender, RoutedEventArgs e)
{
SecondTB.Focus();
ThirdTB.GotFocus -= ThirdTbOnGotFocus;
}