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.
将带有 KeyboardFlag
的 Keyboard
添加到 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>
假设我希望 Entry 元素没有自动更正或自动大写。这可以通过像这样设置它的键盘 属性 来完成:
new Entry { Keyboard = Keyboard.Create(0) }
现在,如何使它成为所有 Entry 元素的全局默认值?
我知道我可以创建一个继承自内置元素的 custom 元素,并以这种方式覆盖 属性,例如:
public class EntryCustom : Entry
{
public EntryCustom()
{
Keyboard = Keyboard.Create(0);
}
}
然后简单地称它为:
new EntryCustom { ... }
但是有没有办法直接在内置元素类型上执行此操作,而无需创建自定义元素类型?
*编辑:在获得一些新发现的 XAML 知识并从 XAML!
弄清楚如何做到这一点后回到这个答案请参阅下文,了解仅使用 XAML.
将带有KeyboardFlag
的 Keyboard
添加到 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>