我有一个绑定到滑块的文本框,并且滑块设置了最小值。
问题在于,如果我开始在文本框中输入超出最小值的值 - 它们会自动转移到最小值。例如如果我将min设置为4,并且我想键入12,一旦我按下1,它已经在文本框中更改为4,我不能输入12,而是它将是42.如果我开始输入4或者5(比如42或51等)就可以了。
有没有办法推迟这个min的检查,直到用户按下enter键为止?
这是XAML:
<TextBox Text="{Binding ElementName=maxValue, Path=Value, UpdateSourceTrigger=PropertyChanged}" TextAlignment="Center" VerticalContentAlignment="Center" Width="30" Height="25" BorderBrush="Transparent"></TextBox>
<Slider Value="{Binding TotalSize}" Maximum="{Binding MaxMaxBackupSize}" Minimum="{Binding MinBackupSize}" TickPlacement="BottomRight" TickFrequency="2" IsSnapToTickEnabled="True" Name="maxValue"></Slider>
答案 0 :(得分:1)
将UpdateSourceTrigger
属性设置为LostFocus
,然后按 TAB :
<TextBox Text="{Binding ElementName=maxValue, Path=Value, UpdateSourceTrigger=LostFocus}" TextAlignment="Center" VerticalContentAlignment="Center" Width="30" Height="25" BorderBrush="Transparent"></TextBox>
或者按 ENTER 并像这样处理PreviewKeyDown
事件:
private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
e.Handled = true;
TextBox textBox = sender as TextBox;
textBox.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}
}
或者您可以按照@Clemens:
的建议显式更新源属性private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
e.Handled = true;
TextBox textBox = sender as TextBox;
BindingExpression be = textBox.GetBindingExpression(TextBox.TextProperty);
be.UpdateSource();
}
}