如何在xamarin表单中自动大写键盘/输入



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

<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>

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

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

以下是官方文档:自定义键盘

以下是所有支持的标志:

  • 无–键盘上没有添加任何功能
  • 大写术语–表示每个输入句子的第一个单词的第一个字母将自动大写
  • 拼写检查–表示将对输入的文本执行拼写检查
  • 建议–表示将在输入的文本中提供单词补全
  • 大写单词–表示每个单词的第一个字母将自动大写
  • 大写字符–表示每个字符都将自动大写
  • CapitaleNone–表示不会自动进行资本化
  • All–表示输入的文本将进行拼写检查、单词完成和句子大写

您可以通过PlatformEffect轻松完成。

Xaml示例:

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

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

NetStd库中的RoutingEffect

该类将通过XAML示例中的sushixmlns引用

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

Android平台效果

注意:您正在将InputFilterAllCaps添加到Android 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/

相关内容

  • 没有找到相关文章

最新更新