0

我有两个条目用户名和密码。用户名和密码始终为大写。我如何强制键盘或输入内容时输入的文本为大写?

<Frame StyleClass="lpframe" x:Name="usernameFrame" CornerRadius="5" BorderColor="Transparent" HasShadow="False">
                <StackLayout>
                    <Label Text="USERNAME" StyleClass="lbl-login">
                        <Label.FontFamily>
                            <OnPlatform x:TypeArguments="x:String">
                                <On Platform="Android" Value="OpenSans-Semibold.ttf#OpenSans-Semibold"/>
                            </OnPlatform>
                        </Label.FontFamily>
                    </Label>
                    <local:CustomEntry Placeholder="Username" PlaceholderColor="#879baa" Unfocused="entUser_Unfocused" StyleClass="form-control" ReturnType="Next" x:Name="entUser">
                        <local:CustomEntry.FontFamily>
                            <OnPlatform x:TypeArguments="x:String">
                                <On Platform="Android" Value="OpenSans-Regular.ttf#OpenSans-Regular"/>
                            </OnPlatform>
                        </local:CustomEntry.FontFamily>
                    </local:CustomEntry>
                </StackLayout>
            </Frame>
            <Frame StyleClass="lpframe" x:Name="passwordFrame" CornerRadius="5" BorderColor="Transparent" HasShadow="False">
                <StackLayout>
                    <Label Text="PASSWORD" StyleClass="lbl-login">
                        <Label.FontFamily>
                            <OnPlatform x:TypeArguments="x:String">
                                <On Platform="Android" Value="OpenSans-Semibold.ttf#OpenSans-Semibold"/>
                            </OnPlatform>
                        </Label.FontFamily>
                    </Label>
                    <local:CustomEntry Placeholder="Password" PlaceholderColor="#879baa" Unfocused="entPassword_Unfocused" IsPassword="True" StyleClass="form-control" ReturnType="Go" x:Name="entPassword">
                        <local:CustomEntry.FontFamily>
                            <OnPlatform x:TypeArguments="x:String">
                                <On Platform="Android" Value="OpenSans-Regular.ttf#OpenSans-Regular"/>
                            </OnPlatform>
                        </local:CustomEntry.FontFamily>
                    </local:CustomEntry>
                </StackLayout>
            </Frame>
4

2 回答 2

7

现在您可以使用 Create 方法工厂来修改键盘行为,如下所示:

<Entry Placeholder="Enter text here">
<Entry.Keyboard>
    <Keyboard x:FactoryMethod="Create">
        <x:Arguments>
            <KeyboardFlags>CapitalizeWord</KeyboardFlags>
        </x:Arguments>
    </Keyboard>
</Entry.Keyboard>

这是官方文档:自定义键盘

以下是所有支持的标志:

  • 无 - 键盘不添加任何功能。
  • CapitalizeSentence - 表示每个输入的句子的第一个单词的第一个字母将自动大写。
  • 拼写检查 - 表示将对输入的文本执行拼写检查。
  • 建议 - 表示将对输入的文本提供单词完成。
  • CapitalizeWord – 表示每个单词的第一个字母将自动大写。
  • CapitalizeCharacter – 表示每个字符都将自动大写。
  • CapitalizeNone – 表示不会发生自动大写。
  • 全部 - 表示将对输入的文本进行拼写检查、单词补全和句子大写。
于 2020-08-31T08:43:25.943 回答
1

PlatformEffect你可以很容易地做到这一点。

Xaml 示例:

<Entry Placeholder="Password" IsPassword="true">
     <Entry.Effects>
        <sushi:CapsEntrytEffect />
    </Entry.Effects>
</Entry>

注意:本例中的 xmlns:sushi 是一个xmlns用于实现的RoutingEffect位置

NetStd 库中的 RoutingEffect

此类将通过sushiXAML 示例中的 xmlns引用

public class CapsEntrytEffect : RoutingEffect
{
    public CapsEntrytEffect() : base("Sushi.CapsEntrytEffect")
    {
    }
}

适用于 Android 的 PlatformEffect

注意:您正在向InputFilterAllCapsAndroid Widget EditText 的当前过滤器列表添加一个。

public class CapsEntrytEffect : PlatformEffect
{
    protected override void OnAttached()
    {
        var editText = Control as EditText;
        editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());
    }

    protected override void OnDetached()
    {
    }
}

适用于 iOS 的 PlatformEffect

public class CapsEntrytEffect : PlatformEffect
{
    protected override void OnAttached()
    {
        var editField = Control as UITextField;
        editField.AutocapitalizationType = UITextAutocapitalizationType.AllCharacters;
    }

    protected override void OnDetached()
    {
    }
}

在您实现 PlatformEffect 的每个项目中,确保包含ResolutionGroupNameExportEffect属性,以便 Forms 可以找到并激活该平台的效果。

ResolutionGroupName 和 ExportEffect 示例::

[assembly: ResolutionGroupName("Sushi")]
[assembly: ExportEffect(typeof(CapsEntrytEffect), "CapsEntrytEffect")]

回复:https ://blog.xamarin.com/customizing-xamarin-forms-controls-with-effects/

于 2018-11-08T08:21:56.893 回答