当前位置: 首页 > news >正文

【WPF】NumericUpDown的用法

在 WPF(Windows Presentation Foundation)中,NumericUpDown 控件并不是内置的标准控件之一,但它是一个非常常用的控件,用于让用户输入一个数值(整数或浮点数),并提供上下箭头来递增或递减数值。

在 WPF 中,你可以通过以下几种方式来使用 NumericUpDown 控件:

方法一:使用 Xceed WPF Toolkit 中的 NumericUpDown

这是最常见和推荐的方式,Xceed 提供了一个强大的 WPF 工具包,其中就包含 NumericUpDown

1. 安装 Xceed WPF Toolkit

使用 NuGet 安装:Install-Package Extended.Wpf.Toolkit

或者通过 Visual Studio 的 NuGet 包管理器搜索安装:Extended.Wpf.Toolkit

2. 在 XAML 中引用命名空间

<Window xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"...

3. 使用 NumericUpDown 控件

<xctk:NumericUpDown Name="numericUpDown1"Minimum="0"Maximum="100"Value="50"Increment="1"ShowButtonSpinner="True"FormatString="N0" />

4. 常用属性说明:

属性名说明
Value当前的数值(绑定用)
Minimum最小值
Maximum最大值
Increment每次递增/递减的步长
ShowButtonSpinner是否显示上下箭头按钮(默认为 true)
FormatString显示格式,例如 N0 表示整数,F2 表示两位小数

 

方法二:使用自定义 UserControl 实现 NumericUpDown

如果你不想使用第三方库,也可以自己创建一个 UserControl,包含一个 TextBox 和两个 Button(↑ ↓)来模拟 NumericUpDown

示例结构:

<StackPanel Orientation="Horizontal"><TextBox Text="{Binding Value, UpdateSourceTrigger=PropertyChanged}" Width="50"/><StackPanel Orientation="Vertical"><Button Content="▲" Click="ButtonUp_Click" /><Button Content="▼" Click="ButtonDown_Click" /></StackPanel>
</StackPanel>

然后在后台代码或 ViewModel 中处理数值的加减逻辑。

 

方法三:使用 System.Windows.Forms 的 NumericUpDown(不推荐)

WPF 可以通过 WindowsFormsIntegration 使用 WinForm 控件,但不推荐,因为会引入混合技术栈,维护麻烦。

数据绑定示例(MVVM)

如果你使用 MVVM 模式,可以在 ViewModel 中定义属性:

public class MainViewModel : INotifyPropertyChanged
{private decimal _value = 50;public decimal Value{get => _value;set{if (_value != value){_value = value;OnPropertyChanged();}}}public event PropertyChangedEventHandler PropertyChanged;protected void OnPropertyChanged([CallerMemberName] string name = null){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));}
}

XAML 绑定:

<xctk:NumericUpDown Value="{Binding Value}" Minimum="0" Maximum="100" />

注意事项

  • NumericUpDown 支持 decimal 类型,可以处理浮点数。
  • 支持格式化显示,比如货币、百分比等。
  • 推荐使用 Xceed 的版本,功能强大且易于维护。

 

DataValidation的用法

高级功能(比如小数位数限制、负数禁用、事件处理等),可以进一步扩展或使用 DataValidation 

DataValidation 在 WPF 中主要用于确保用户输入的数据符合应用程序的预期格式和范围。通过数据验证,可以在用户输入非法数据时提供即时反馈,提升用户体验。WPF 提供了几种方法来实现数据验证功能,其中最常用的是使用 IDataErrorInfo 接口和 ExceptionValidationRule 类。

以下是两种主要的数据验证方法:

1. 使用 IDataErrorInfo 实现数据验证

IDataErrorInfo 是一个接口,可以让你在 ViewModel 或 Model 中定义属性验证逻辑。当绑定到一个实现了 IDataErrorInfo 的对象时,WPF 会自动调用这个接口的方法来获取错误信息,并显示给用户。

示例代码:

首先,确保你的 ViewModel 实现了 IDataErrorInfo 接口:

public class MainViewModel : INotifyPropertyChanged, IDataErrorInfo
{private decimal _value;public decimal Value{get => _value;set{if (_value != value){_value = value;OnPropertyChanged();}}}public string Error => null;public string this[string columnName]{get{if (columnName == nameof(Value)){if (Value < 0 || Value > 100){return "数值必须在0到100之间";}}return null;}}public event PropertyChangedEventHandler PropertyChanged;protected void OnPropertyChanged([CallerMemberName] string name = null){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));}
}

然后,在 XAML 中配置绑定以启用验证:

<Window x:Class="YourNamespace.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="350" Width="525"><Grid><xctk:NumericUpDown Value="{Binding Value, ValidatesOnDataErrors=True, NotifyOnValidationError=True}" Minimum="0" Maximum="100" /></Grid>
</Window>

注意:ValidatesOnDataErrors=TrueNotifyOnValidationError=True 需要设置以启用数据验证。

2. 使用 ExceptionValidationRule 实现数据验证

另一种方式是使用 ExceptionValidationRule 来处理异常情况作为验证错误。这种方式适用于你希望直接从属性 setter 方法中抛出异常的情况。

示例代码:

假设我们有一个简单的属性验证逻辑,它会在不满足条件时抛出异常:

private decimal _value;
public decimal Value
{get => _value;set{if (value < 0 || value > 100){throw new ArgumentException("数值必须在0到100之间");}_value = value;OnPropertyChanged();}
}

 接下来,在 XAML 中配置绑定以使用 ExceptionValidationRule

<xctk:NumericUpDown Value="{Binding Value}"><xctk:NumericUpDown.BindingGroup><BindingGroup><BindingGroup.ValidationRules><ExceptionValidationRule/></BindingGroup.ValidationRules></BindingGroup></xctk:NumericUpDown.BindingGroup>
</xctk:NumericUpDown>

总结

  • IDataErrorInfo 是一种灵活且易于管理的数据验证方法,特别适合于 MVVM 模式。
  • ExceptionValidationRule 更加直接,但不如 IDataErrorInfo 灵活,通常用于需要抛出异常的场景。

根据你的需求选择合适的数据验证策略。如果你正在使用 MVVM 模式,推荐使用 IDataErrorInfo。如果需要更复杂的验证逻辑或跨字段验证,可能还需要考虑其他技术如 INotifyDataErrorInfo(适用于 .NET Framework 4.5 及以上版本)。

 

http://www.dtcms.com/a/298903.html

相关文章:

  • 01 01 01 第一部分 C++编程知识 C++入门 第一个C++程序
  • Linux如何执行系统调用及高效执行系统调用:深入浅出的解析
  • HashMap(JDK1.7、JDK1.8)原理与结构分析与synchronizedMap()
  • Spring Boot SSE实战:SseEmitter实现多客户端事件广播与心跳保活
  • Spring Boot 实战:用 Apache Commons CSV 优雅解析 CSV 文件
  • x86汇编语言入门基础(三)汇编指令篇5 串操作
  • OpenCV学习探秘之一 :了解opencv技术及架构解析、数据结构与内存管理​等基础
  • 技术赋能与营销创新:开源链动2+1模式AI智能名片S2B2C商城小程序的流量转化路径研究
  • 嵌入式硬件篇---zigbee无线串口通信问题解决方法
  • Claude 4.0 终极编程指南:模型对比、API配置与IDE集成实战
  • CMakeLists.txt 怎么写
  • 39.Python 中 list.sort() 与 sorted() 的本质区别与最佳实践
  • 数据库索引详解:原理、设计原则与应用场景
  • NLua和C#交互
  • 6G通感算
  • Spring Boot DFS、HDFS、AI、PyOD、ECOD、Junit、嵌入式实战指南
  • 学习游戏制作记录(剑投掷技能)7.26
  • Kotlin 数据容器 - List 扩展(转换操作、过滤操作、排序操作、分组操作、集合操作、归纳操作、窗口操作)
  • 一款基于react-native harmonyOS 封装的【文档】文件预览查看开源库(基于Harmony 原生文件预览服务进行封装)
  • 【深度之眼机器学习笔记】04-01-决策树简介、熵,04-02-条件熵及计算举例,04-03-信息增益、ID3算法
  • OpenCV图像梯度、边缘检测、轮廓绘制、凸包检测大合集
  • 今天凌晨,字节开源 Coze,如何白嫖?
  • 【Vue2】结合chrome与element-ui的网页端条码打印
  • 使用Spring Boot创建Web项目
  • QT开发---网络编程上
  • 【CTF-WEB-反序列化】利用__toString魔术方法读取flag.php
  • 传统框架与减震楼盖框架地震动力响应分析与有限元模拟
  • USB Type-c
  • 《P3313 [SDOI2014] 旅行》
  • 关于我司即将对商业间谍行为进行法律诉讼的通知