在Xamarin.Forms PCL XAML页面中禁用自动完成

在Xamarin.Forms PCL XAML页面中禁用自动完成,xaml,mvvm,portable-class-library,xamarin.forms,Xaml,Mvvm,Portable Class Library,Xamarin.forms,我有一个PCL,它将我的MVVM页面存储在XAML中。我在XAML文件中有以下内容,但我想禁用键盘上的自动完成功能。有人知道我如何在XAML中做到这一点吗 <Entry Text="{Binding Code}" Placeholder="Code" /> 表单支持一个枚举,我认为它是用来控制这种行为的,但它似乎没有很好的文档记录。键盘标志应该可以做到这一点,比如: MyEntry.Keyboard = Keyboard.Create(KeyboardFlags.Capitaliz

我有一个PCL,它将我的MVVM页面存储在XAML中。我在XAML文件中有以下内容,但我想禁用键盘上的自动完成功能。有人知道我如何在XAML中做到这一点吗

<Entry Text="{Binding Code}" Placeholder="Code" />

表单支持一个枚举,我认为它是用来控制这种行为的,但它似乎没有很好的文档记录。

键盘标志应该可以做到这一点,比如:

MyEntry.Keyboard = Keyboard.Create(KeyboardFlags.CapitalizeSentence | KeyboardFlags.Spellcheck);

虽然已经有了答案,但我想我应该进一步阐述一下XAML中的用法

与代码隐藏不同,您不能创建要使用的键盘类的新实例,但有一种方法。希望您已经在App.cs上安装了xaml(删除它,然后创建App.xaml和App.xaml.cs),这样您就不必检查Resources属性是否已经初始化

下一步是重写OnStart()方法,并为您使用的各种键盘添加适当的条目。我通常使用三种键盘:数字键盘、电子邮件键盘和文本键盘。另一个有用的是Url键盘,但您可以用同样的方法添加它。

这个小代码将使键盘作为静态资源可用。要在XAML中使用它们,只需执行以下操作:

<Entry x:Name="emailEntry" Text="{Binding EMail}" Keyboard="{StaticResource KeyboardEmail}" />


瞧,您的条目现在有了一个电子邮件键盘。

自定义
键盘
实例可以使用
x:FactoryMethod
属性在XAML中创建。您想要的可以通过以下标记实现:

<Entry Text="{Binding Code}" Placeholder="Code">
  <Entry.Keyboard>
    <Keyboard x:FactoryMethod="Create">
      <x:Arguments>
        <KeyboardFlags>None</KeyboardFlags>
      </x:Arguments>
    </Keyboard>
  </Entry.Keyboard>
</Entry>
当您不需要自定义
键盘时,可以利用
x:Static
属性使用:

<Entry Placeholder="Phone" Keyboard="{x:Static Keyboard.Telephone}" />

我知道这是一个旧线程,但我找到了一种在样式中实现这一点的方法

我在我的
App.xaml
中的
ResourceDictionary
中定义了我的所有样式。在那里,我可以做以下事情:


然后像这样使用它:


但是,如果我想设置
键盘标志
,该怎么办?好吧,我在App.xaml.cs中使用了一些代码和一个简单的绑定。首先,在my
App.xaml的顶部:


然后我的样式在同一个App.xaml中的位置:


最后,在我的
App.xaml.cs
code-behind中:

公用键盘键盘文本
=>Keyboard.Create(KeyboardFlags.CapitalizeNone | KeyboardFlags.拼写检查);

而且,如果需要,我可以在代码隐藏中创建其他类似属性,用于其他样式。

某种程度上,是的。您必须以编程方式在App.OnStart中创建资源,并通过绑定以StaticResource的形式访问它们。我将在稍后添加答案。@Julien请参阅我的答案,了解如何仅使用XAML创建自定义键盘。不需要为静态成员创建资源。有关
x:Static
属性的详细信息,请参见我的答案。@本页文档似乎尚未更新,但现在有一个
None
成员。如果能将其融入到一种风格中,那该多好啊?
<KeyboardFlags>CapitalizeSentence,Spellcheck</KeyboardFlags>
<Entry Placeholder="Phone" Keyboard="{x:Static Keyboard.Telephone}" />