You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 15:12:39