# NumericUpDown 使用文档 本文档介绍 AtomUI NumericUpDown 控件的各种使用方式,示例代码摘自 Gallery 演示程序。 > 📖 Gallery 源码位置:`controlgallery/AtomUIGallery/ShowCases/Views/DataEntry/NumberUpDownShowCase.axaml` --- ## 前置准备 在 AXAML 中使用 NumericUpDown,需要引入以下命名空间: ```xml xmlns:atom="https://atomui.net" xmlns:antdicons="https://atomui.net/icons/antdesign" ``` 在 C# 代码中引入: ```csharp using AtomUI.Desktop.Controls; // NumericUpDown 控件 using AtomUI.Controls; // SizeType 等共享类型 ``` --- ## 1. 基本用法 最简单的数字输入框,直接设置初始值: ```xml ``` 默认配置: - 尺寸:`Middle`(32px 高度) - 样式:`Outline`(标准边框) - 步长:`1` - 范围:`decimal.MinValue` ~ `decimal.MaxValue` --- ## 2. 高精度字符串模式(StringMode) 当需要处理超出 `decimal` 精度范围的数值时,启用 `StringMode`: ```xml ``` ```csharp // ViewModel public class NumberUpDownViewModel : ReactiveObject { private string? _stringModeValue = "0.123456789012345678901234"; public string? StringModeValue { get => _stringModeValue; set => this.RaiseAndSetIfChanged(ref _stringModeValue, value); } } ``` **使用场景**:科学计算、财务高精度场景,数值以原始字符串形式传输,避免精度丢失。 --- ## 3. 键盘控制 通过 `Keyboard` 属性控制是否允许使用方向键步进: ```xml ``` ```csharp private bool _keyboardEnabled = true; public bool KeyboardEnabled { get => _keyboardEnabled; set => this.RaiseAndSetIfChanged(ref _keyboardEnabled, value); } ``` 当 `Keyboard="False"` 时,Up/Down/PageUp/PageDown 键不会触发数值增减。 --- ## 4. 鼠标滚轮控制 通过 `MouseWheel` 属性控制是否允许使用鼠标滚轮步进: ```xml ``` ```csharp private bool _mouseWheelEnabled = true; public bool MouseWheelEnabled { get => _mouseWheelEnabled; set => this.RaiseAndSetIfChanged(ref _mouseWheelEnabled, value); } ``` --- ## 5. 取值范围限制 通过 `Minimum` 和 `Maximum` 属性限制输入范围。步进按钮会自动感知边界并在到达极值时禁用: ```xml ``` 当 `Value = 10` 时,增加按钮自动禁用;当 `Value = 0` 时,减少按钮自动禁用。 --- ## 6. 小数步长 通过 `Increment` 属性设置小数步长: ```xml ``` 每次点击步进按钮,数值增加或减少 `0.25`。 --- ## 7. 三种尺寸 通过 `SizeType` 属性设置尺寸,支持 `Large`、`Middle`(默认)、`Small` 三种: ```xml ``` | 尺寸 | 高度 | 字体大小 | |---|---|---| | `Large` | 40px | `InputFontSizeLG` | | `Middle` | 32px | `InputFontSize` | | `Small` | 24px | `InputFontSizeSM` | --- ## 8. 三种样式变体 通过 `StyleVariant` 属性设置样式变体: ```xml ``` - **Outline**:标准边框样式(默认) - **Filled**:灰色填充背景 - **Borderless**:无边框,适合嵌入其他控件内 --- ## 9. 禁用状态 通过 `IsEnabled="False"` 禁用输入框,所有变体均支持: ```xml ``` 禁用状态下:输入框不可编辑、步进按钮不可点击、整体使用灰色调。 --- ## 10. 前后置标签(AddOn) 通过 `LeftAddOn` 和 `RightAddOn` 属性在输入框外部添加附加内容: ```xml ``` AddOn 是输入框**外部**的独立区域,有独立的背景色和边框,适合显示协议前缀、域名后缀等。 --- ## 11. 清除按钮 通过 `IsAllowClear="True"` 启用清除按钮: ```xml ``` - 输入框非空且非只读时,右侧显示清除图标(默认 `CloseCircleFilled`) - 点击清除图标将 `Value` 设为 `null` - 可通过 `ClearIcon` 属性自定义图标 --- ## 12. 内部前后置内容(Prefix / Suffix) 通过 `InnerLeftContent` 和 `InnerRightContent` 属性在输入框**内部**添加图标或文本: ```xml ``` 与 AddOn 的区别:`InnerLeftContent` / `InnerRightContent` 嵌入在输入框**内部**,没有独立背景,适合显示货币符号、单位等。 --- ## 13. 验证状态 通过 `Status` 属性设置错误或警告状态,可与所有变体组合: ```xml ``` 验证状态通过颜色变化提供视觉反馈: - **Error**:边框/底部线变为红色系(`ColorError`) - **Warning**:边框/底部线变为黄色系(`ColorWarning`) --- ## 常见组合模式 ### 表单中的数值输入 ```xml ``` ### 带单位的金额输入 ```xml ``` ### 紧凑空间中的数值输入 ```xml ``` ### MVVM 值绑定 ```xml ``` ```csharp // ViewModel [Reactive] public decimal? Quantity { get; set; } = 1; public decimal MinQuantity => 0; public decimal MaxQuantity => 999; ```