Avalonia最新版本,默认拦截了TextInputEvent事件,所以无法通过xaml来定义。
OnlyNumbers.axaml代码
<Window xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Height="300" Width="300" x:Class="AvaloniaUI.OnlyNumbers" Title="OnlyNumbers"> <StackPanel Margin="5"> <TextBox Margin="3" AcceptsTab="True"></TextBox> <TextBox Margin="3"></TextBox> <TextBox Margin="3"></TextBox> </StackPanel> </Window>
OnlyNumbers.axaml.cs代码
using Avalonia;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using System;
using System.Linq;
namespace AvaloniaUI;
public partial class OnlyNumbers : Window
{
public OnlyNumbers()
{
InitializeComponent();
this.AddHandler(TextInputEvent, PreTextCheck, RoutingStrategies.Tunnel);
this.AddHandler(KeyDownEvent, PreKeyDown, RoutingStrategies.Tunnel);
}
private void PreTextCheck(object? sender, TextInputEventArgs e)
{
if (e.Text!.All(char.IsLetter))
{
e.Handled = true;
}
}
private void PreKeyDown(object? sender, KeyEventArgs e)
{
if (e.Key==Key.Space)
{
e.Handled = true;
}
}
}
运行效果

浙公网安备 33010602011771号