Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF:Textbox+;具有最小值的滑块_C#_Wpf_Textbox_Slider - Fatal编程技术网

C# WPF:Textbox+;具有最小值的滑块

C# WPF:Textbox+;具有最小值的滑块,c#,wpf,textbox,slider,C#,Wpf,Textbox,Slider,我有一个绑定到滑块的文本框,滑块设置了最小值 问题是,如果我开始在文本框中输入超出最小值的值,它们会自动传输到最小值。例如,如果我将最小值设置为4,我想键入12,一旦我按下1,文本框中的值就已经更改为4,我无法输入12,而是42。如果我开始用4或5(比如42或51等)来输入一些东西,就可以了 是否有办法将此最小值检查推迟到用户按下enter键之后 以下是XAML: <TextBox Text="{Binding ElementName=maxValue, Path=Value, Updat

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

问题是,如果我开始在文本框中输入超出最小值的值,它们会自动传输到最小值。例如,如果我将最小值设置为4,我想键入12,一旦我按下1,文本框中的值就已经更改为4,我无法输入12,而是42。如果我开始用4或5(比如42或51等)来输入一些东西,就可以了

是否有办法将此最小值检查推迟到用户按下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>

UpdateSourceTrigger
属性设置为
LostFocus
,然后按TAB键:

或者您可以按照@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();
    }
}

尝试在文本中添加
Mode=OneWayToSource
binding@ASh但它不会更新幻灯片。这可能会有所帮助:。然后还应该删除
updateSourceTracger=PropertyChanged
。与其更改键事件处理程序中的焦点,不如通过BindingExpression.UpdateSource显式更新源属性。谢谢大家,非常感谢
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));
    }
}
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();
    }
}