- 设置 AvaloniaKeyboard 包版本为 0.1.0,并补充作者、描述、许可证及仓库信息 - 将中文 README 和键盘布局配图包含到 NuGet 包中
AvaloniaKeyboard
面向 Avalonia 桌面应用的虚拟键盘,支持触摸和鼠标操作。为 TextBox 启用后,获取焦点即可弹出,点击外部或按 Escape 关闭。同一应用的多个窗口共享一个自动弹出的键盘。
| 浅色主题 | 深色主题 |
|---|---|
![]() |
![]() |
支持选区编辑、大小写切换、长按退格与光标移动、密码输入,以及物理键盘和屏幕键盘混用。键盘尺寸、按键间距和弹出位置均可配置。
快速接入
在应用中引用 AvaloniaKeyboard 项目,然后在 App.axaml 的现有应用主题之后添加键盘主题:
<Application.Styles>
<KeyboardTheme />
</Application.Styles>
主题和控件已注册到 Avalonia 默认命名空间,可以直接使用。也支持独立命名空间,推荐前缀为 k:
<Window xmlns="https://github.com/avaloniaui"
xmlns:k="https://avalonia.com/keyboard">
<TextBox k:KeyboardInput.IsEnabled="True" />
</Window>
键盘跟随应用的浅色或深色主题。确认后默认关闭;将 KeyboardInput.ConfirmBehavior 设为 KeepOpen 可保持展开,设为 Next 可跳转到下一个已启用键盘的输入框。普通多行输入框的确认键用于换行。
键盘布局
通过 KeyboardInput.Layout 为不同输入框选择布局。
| 布局 | 说明 |
|---|---|
Letters |
默认布局,字母上方常驻数字行,可切换到符号页 |
Symbols |
数字、标点和符号 |
Numeric |
集中排列数字,同时提供常用符号 |
NumericOnly |
数字键盘,保留小数点、负号和编辑键 |
Alphanumeric |
字母与数字,不提供空格和标点 |
NumericConstrained |
带标题、范围提示和校验反馈的数字键盘 |
| 数字模式 | 字母与数字模式 |
|---|---|
![]() |
![]() |
数值校验
选择整数或小数类型,并设置允许的输入范围:
<TextBox k:KeyboardInput.IsEnabled="True"
k:KeyboardInput.Layout="NumericConstrained"
k:KeyboardInput.NumericTitle="数量"
k:KeyboardInput.NumericType="Integer"
k:KeyboardInput.Minimum="0"
k:KeyboardInput.Maximum="100" />
范围提示会自动生成。设置 KeyboardInput.IsNumericTypeVisible="False" 可隐藏类型名称。
点击确认时检查当前文本,不合法则在右侧显示原因并保持展开,方便继续修改。受限数字模式下,物理 Enter 使用相同的校验逻辑。
绑定的 ViewModel 可以通过 INotifyDataErrorInfo 提供业务错误,键盘会同步显示并阻止确认。示例中的数量字段额外要求输入偶数,可直接体验这一行为。自定义确认事件中也可以设置 CancelClose,阻止键盘自动关闭。
按键外观
可以直接设置字号、文字粗细、图标大小、描边及颜色:
<k:VirtualKeyboard KeyFontSize="28"
KeyLabelFontSize="18"
KeyFontWeight="SemiBold"
KeyIconSize="30"
KeyIconStrokeThickness="1.8"
KeyForeground="#172334"
FunctionKeyForeground="#172334"
ConfirmKeyForeground="#172334" />
自动弹出时,在输入框上设置同名的 k:KeyboardInput.KeyFontSize 等附加属性,也可在窗口或父容器上统一设置。修改后立即生效,未设置时使用浅色或深色主题的默认值。
运行示例
dotnet run --project src/AvaloniaKeyboard.Example
也可以在仓库根目录执行 just run。
项目基于 .NET 8 和 Avalonia 11.3.11。已验证 Windows 桌面及 Windows x64 Native AOT,Linux 和 macOS 尚需分别进行平台验证。




