如何让IntegerUpDown鼠标加减即时生效、键盘输入仅回车触发事件
解决方案
实现思路
通过拆分两种输入场景的处理逻辑,同时保留原有业务代码不变:
- 利用
UpdateValueOnEnterKey="True"属性限制键盘输入仅在回车时提交值 - 通过
Spin事件捕获增减按钮点击操作,手动提交值触发事件响应
步骤1:修改XAML代码
给IntegerUpDown控件添加属性和事件注册:
<toolkit:IntegerUpDown x:Name="AnyName" Grid.Column="0" Grid.Row="2" Margin="5, 2, 10, 2" Grid.ColumnSpan="4" FormatString="N0" UpdateValueOnEnterKey="True" ValueChanged="AnyName_ValueChanged" Spin="AnyName_Spin"/>
步骤2:添加Spin事件处理逻辑
后台代码新增Spin事件处理,仅需添加一行提交输入的代码,原有业务逻辑无需修改:
private void AnyName_Spin(object sender, SpinEventArgs e) { // 点击增减按钮时强制提交当前值,触发ValueChanged事件 AnyName.CommitInput(); } // 原有业务逻辑保持不变 private void AnyName_ValueChanged(object sender, RoutedPropertyChangedEventArgs<object> e) { if (AnyName.IsLoaded) { string s = string.Format(CultureInfo.InvariantCulture, AnyName.Value.ToString()); Console.WriteLine(s); } }
原理解释
- 设置
UpdateValueOnEnterKey="True"后,控件默认会阻断键盘输入过程中的自动值提交,仅在按下回车键时才将输入内容同步到Value属性并触发ValueChanged事件,解决了输入单字符就触发事件的问题。 - 增减按钮点击时会触发控件原生的
Spin事件,调用CommitInput()方法会强制将当前控件的显示值同步到Value属性,触发ValueChanged事件,实现按钮点击即时响应的需求。 - 两种场景的逻辑最终都会走原有
ValueChanged里的业务代码,无需重复开发,也不会出现重复触发的问题。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

