Xamarin.Forms - 可以全局设置元素 属性 吗?

Xamarin.Forms - possible to set an element property globally?

假设我希望 Entry 元素没有自动更正或自动大写。这可以通过像这样设置它的键盘 属性 来完成:

new Entry { Keyboard = Keyboard.Create(0) }

现在,如何使它成为所有 Entry 元素的全局默认值

我知道我可以创建一个继承自内置元素的 custom 元素,并以这种方式覆盖 属性,例如:

public class EntryCustom : Entry
{
    public EntryCustom()
    {
        Keyboard = Keyboard.Create(0);
    }
}

然后简单地称它为:

new EntryCustom { ... }

但是有没有办法直接在内置元素类型上执行此操作,而无需创建自定义元素类型?

*编辑:在获得一些新发现的 XAML 知识并从 XAML!

弄清楚如何做到这一点后回到这个答案

请参阅下文,了解仅使用 XAML.

将带有 KeyboardFlagKeyboard 添加到 Style

有关可用的 KeyboardFlag 值,另请参阅 here。我只是在下面使用 None

<ContentPage.Resources>
  <ResourceDictionary>
    <Keyboard x:Key="NoCapitalizationKeyboard"
              x:FactoryMethod="Create">
      <x:Arguments>
        <KeyboardFlags>None</KeyboardFlags>
      </x:Arguments>
    </Keyboard>

    <Style x:Key="NoCapitalizationEntryStyle"
           TargetType="Entry">
            <Setter Property="Keyboard"
                    Value="{StaticResource NoCapitalizationKeyboard}">
        </Style>
    <Style BasedOn="{StaticResource NoCapitalizationEntryStyle}"
           TargetType="Entry" />
  </ResourceDictionary>
</ContentPage.Resources>

<Entry />

-- 旧答案--

不幸的是,我认为您不能使用全局样式来做到这一点,因为您只能将键盘设置为列出的预定义键盘集之一 here,而不是能够单独打开和打开特定功能关闭。

另一种选择是为 Entry 控件本身创建自定义呈现器,然后实现代码以在每个平台中将其关闭。类似于 this 用于 iOS(除非我认为您会使用 Control.AutocapitalizationType = UITextAutocapitalizationType.None;)。

您可以将自定义键盘保存为静态,然后使用默认样式将其绑定到所有输入字段。您可以将该默认样式放入应用程序范围的资源字典中,该字典会自动应用于整个应用程序。这是我刚刚在新的空 Forms 项目中测试验证的示例代码:

步骤1.将自定义键盘保存成静态

Keyboards.cs(静态自定义键盘):

using Xamarin.Forms;

namespace KeyboardDemo
{
    public static class Keyboards
    {
        public static Keyboard Unassisted { get; private set; }

        static Keyboards ()
        {
            Unassisted = Keyboard.Create (0);
        }
    }
}

第 2 步。为您的项目创建一个 App.xaml。

按照此提示将 App.xaml 添加到您的表单项目:http://jfarrell.net/2015/02/02/centralize-your-styles-with-xamarin-forms/

步骤3.添加默认样式App.xaml

App.xaml:

<?xml version="1.0" encoding="UTF-8"?>
<Application 
        xmlns="http://xamarin.com/schemas/2014/forms" 
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
        xmlns:demo="clr-namespace:KeyboardDemo" 
        x:Class="KeyboardDemo.App">

    <Application.Resources>
        <ResourceDictionary>
            <Style x:Key="EntryStyle" TargetType="Entry">
                <Setter Property="Keyboard" Value="{x:Static demo:Keyboards.Unassisted}" />
            </Style>
            <Style BasedOn="{StaticResource EntryStyle}" TargetType="Entry" />
        </ResourceDictionary>
    </Application.Resources>

</Application>

步骤 4. 向项目添加新页面

向应用程序添加一个 ContentPage,使用普通的 Entry 控件来验证样式。

App.xaml.cs:

using Xamarin.Forms;

namespace KeyboardDemo
{
    public partial class App : Application
    {
        public App ()
        {
            InitializeComponent ();
            MainPage = new MyPage ();
        }
    }
}

MyPage.xaml:

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage 
        xmlns="http://xamarin.com/schemas/2014/forms" 
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
        x:Class="KeyboardDemo.MyPage">
    <ContentPage.Padding>
        <OnPlatform x:TypeArguments="Thickness" iOS="0,20,0,0" Android="0" WinPhone="0" />
    </ContentPage.Padding>

    <StackLayout>
        <Entry />
    </StackLayout>
</ContentPage>