假设我想要一个Entry元素没有自动更正或自动大写。这可以通过设置其Keyboard属性来完成:
new Entry { Keyboard = Keyboard.Create(0) }
现在,如何使所有条目元素的全局默认值?
我知道我可以创建一个继承自内置元素的自定义元素,并以这种方式覆盖属性,如:
public class EntryCustom : Entry
{
public EntryCustom()
{
Keyboard = Keyboard.Create(0);
}
}
然后简单地称之为:
new EntryCustom { ... }
但有没有办法直接在内置元素类型上执行此操作,而无需创建自定义元素类型?
答案 0 :(得分:2)
您可以将自定义键盘保存为静态,然后使用默认样式将其绑定到所有Entry字段。您可以将该默认样式放入应用程序范围的资源字典中,该字典会自动应用于整个应用程序。以下是我刚测试在新的空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添加到您的Forms项目: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>