如何让MAUI Entry控件仅接受A-Z大写字母输入
MAUI Entry 仅允许输入大写A-Z字母的解决方案
你当前的Keyboard设置仅能自动转换输入为大写,但无法限制数字、符号的输入。以下两种方法可以实现严格的输入限制:
方法一:使用TextChanged事件(快速实现)
直接在Entry的TextChanged事件中过滤非大写字母的字符:
XAML代码修改
<Entry x:Name="txtUserName" Placeholder="User Name" Text="{Binding UserName}" MaxLength="15" TextChanged="TxtUserName_TextChanged"> <Entry.Keyboard> <Keyboard x:FactoryMethod="Create"> <x:Arguments> <KeyboardFlags>CapitalizeCharacter</KeyboardFlags> </x:Arguments> </Keyboard> </Entry.Keyboard> </Entry>
后台C#代码
private void TxtUserName_TextChanged(object sender, TextChangedEventArgs e) { if (sender is Entry entry) { // 过滤出仅A-Z的大写字母 var filteredText = new string(e.NewTextValue?.Where(c => c >= 'A' && c <= 'Z').ToArray() ?? Array.Empty<char>()); // 避免绑定循环触发 if (entry.Text != filteredText) { entry.Text = filteredText; } } }
方法二:自定义Behavior(复用性强)
如果多个Entry需要相同的输入限制,推荐用自定义Behavior提升复用性:
自定义Behavior代码
using Microsoft.Maui.Controls; public class UppercaseLettersOnlyBehavior : Behavior<Entry> { protected override void OnAttachedTo(Entry entry) { entry.TextChanged += OnEntryTextChanged; base.OnAttachedTo(entry); } protected override void OnDetachingFrom(Entry entry) { entry.TextChanged -= OnEntryTextChanged; base.OnDetachingFrom(entry); } private void OnEntryTextChanged(object sender, TextChangedEventArgs e) { if (sender is Entry entry) { var filteredText = new string(e.NewTextValue?.Where(c => c >= 'A' && c <= 'Z').ToArray() ?? Array.Empty<char>()); if (entry.Text != filteredText) { entry.Text = filteredText; } } } }
XAML中引用Behavior
<!-- 先添加命名空间引用,替换为你的项目根命名空间 --> <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:YourProjectNamespace" x:Class="YourProjectNamespace.YourPage"> <Entry x:Name="txtUserName" Placeholder="User Name" Text="{Binding UserName}" MaxLength="15"> <Entry.Keyboard> <Keyboard x:FactoryMethod="Create"> <x:Arguments> <KeyboardFlags>CapitalizeCharacter</KeyboardFlags> </x:Arguments> </Keyboard> </Entry.Keyboard> <Entry.Behaviors> <local:UppercaseLettersOnlyBehavior /> </Entry.Behaviors> </Entry> </ContentPage>
两种方法都会实时过滤非A-Z的字符,确保输入框中只有大写字母。方法一适合单个Entry快速实现,方法二更适合多个Entry复用相同规则的场景。
内容的提问来源于stack exchange,提问作者sandeep jakhotya
相关产品推荐
相关产品推荐

