WPF:具有最小值的文本框+滑块

时间:2017-08-15 09:22:46

标签: c# wpf textbox slider

我有一个绑定到滑块的文本框,并且滑块设置了最小值。

问题在于,如果我开始在文本框中输入超出最小值的值 - 它们会自动转移到最小值。例如如果我将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>

1 个答案:

答案 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();
    }
}