tnblog
首页
视频
资源
登录

Xamarin.Forms Entry 文本框

6639人阅读 2022/4/27 11:00 总访问:3648421 评论:0 收藏:0 手机
分类: Xamarin

Xamarin.Forms Entry 文本框

Entry简介


Xamarin.Forms Entry 控件允许对单行文本进行编辑。 本文演示了如何为 Entry 控件创建自定义呈现器,使开发人员能够使用自己特定于平台的自定义呈现替代默认本机呈现。
每个 Xamarin.Forms 控件都有一个附带的呈现器,适用于创建本机控件实例的各个平台。 Xamarin.Forms 应用程序呈现 Entry 控件时,在 iOS 中实例化EntryRenderer类,而该操作又会实例化本机UITextField控件。 在 Android 平台上,EntryRenderer 类实例化 EditText 控件。 在通用 Windows 平台 (UWP) 上,EntryRenderer 类实例化 TextBox 控件
下图说明了 Entry 控件和实现它的相应本机控件之间的关系:

Entry简单示例


在Xamarin.Forms项目中创建Entries.xaml(Forms ContentPage XAML),编写如下代码:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <ContentPage
  3. xmlns="http://xamarin.com/schemas/2014/forms"
  4. xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
  5. x:Class="LableApp.Entries">
  6. <ContentPage.Content>
  7. <StackLayout>
  8. <Entry Text="Tnblog"></Entry>
  9. <Entry Text="Tnblog" IsReadOnly="True"></Entry>
  10. <Entry Placeholder="Name"></Entry>
  11. <Entry Placeholder="Name" PlaceholderColor="Red"></Entry>
  12. <Entry Placeholder="Name" MaxLength="15"></Entry>
  13. <Entry Placeholder="Password" IsPassword="True"></Entry>
  14. <Entry Text="Tnblog" ReturnType="Search"></Entry>
  15. <Entry x:Name="txtName"></Entry>
  16. <Entry Completed="Entry_Completed"></Entry>
  17. <Entry TextChanged="Entry_TextChanged"></Entry>
  18. <Label x:Name="lblValue" FontSize="Large" TextColor="Red"></Label>
  19. </StackLayout>
  20. </ContentPage.Content>
  21. </ContentPage>


在后台写入相关事件:

  1. public partial class Entries : ContentPage
  2. {
  3. public Entries ()
  4. {
  5. InitializeComponent ();
  6. }
  7. void Entry_Completed(System.Object sender, System.EventArgs e)
  8. {
  9. lblValue.Text = ((Entry)sender).Text;
  10. }
  11. void Entry_TextChanged(System.Object sender, Xamarin.Forms.TextChangedEventArgs e)
  12. {
  13. lblValue.Text = e.NewTextValue;
  14. }
  15. }

常用属性与事件 描述
Text 获取或设置输入视图的文本。
TextColor 获取或设置文本颜色。
Placeholder 获取或设置在控件为空时显示的文本。
PlaceholderColor 获取或设置占位符文本的颜色。
MaxLength 获取或设置允许的最大输入长度。
IsPassword 获取或设置一个值,该值指示该条目是否应以可视方式遮盖键入的文本。
ReturnType 获取或设置一个枚举值,用于控制返回按钮的外观。
Completed 当用户使用返回键完成条目中的文本时发生。
TextChanged 在编辑器的文本更改时引发的事件。
FontSize 获取 Entry 元素文本的字体大小。

自定义Entry


通过在每个平台上为 Entry 控件创建自定义呈现器,可以利用呈现过程来实现特定于平台的自定义。 执行此操作的过程如下:
1.创建自定义控件。
2.从 使用自定义控件。
3.在每个平台上为控件创建自定义呈现器。
现在将依次讨论每个项,以在每个平台上实现具有不同背景颜色的 Entry 控件。

创建自定义 Entry 控件


通过子类化 Entry 控件,可以创建自定义 Entry 控件,如以下示例代码所示:

  1. public class MyEntry : Entry
  2. {
  3. }


MyEntry 控件创建在 .NET Standard 库项目中,并且只是 Entry 控件。 将在自定义呈现器中进行控件自定义,因此 MyEntry 控件中无需任何其他实现。

使用自定义控件


通过在控件元素上声明 MyEntry 自定义控件位置的命名空间并使用命名空间前缀,可以在 .NET Standard 库项目的 XAML 中引用该控件。 下面的代码示例演示 XAML 页可以如何使用 MyEntry 控件:

  1. <ContentPage xmlns:local="clr-namespace:CustomRenderer;assembly=CustomRenderer">
  2. <local:MyEntry Text="In Shared Code" />
  3. </ContentPage>


local 命名空间前缀可以命名为任何内容。 但是,clr-namespaceassembly 值必须与自定义控件的详细信息相匹配。 声明命名空间后,前缀用于引用自定义控件。
下面的代码示例演示 C# 页可以如何使用 MyEntry 控件:

  1. public class MainPage : ContentPage
  2. {
  3. public MainPage ()
  4. {
  5. Content = new StackLayout {
  6. Children = {
  7. new Label {
  8. Text = "Hello, Custom Renderer !",
  9. },
  10. new MyEntry {
  11. Text = "In Shared Code",
  12. }
  13. },
  14. VerticalOptions = LayoutOptions.CenterAndExpand,
  15. HorizontalOptions = LayoutOptions.CenterAndExpand,
  16. };
  17. }
  18. }


此代码实例化新的 ContentPage 对象,该对象将在页面上垂直居中以及水平居中显示 Label 和 MyEntry 控件。
现在可以向每个应用程序项目添加自定义呈现器,以便在每个平台上自定义控件外观。

在每个平台上创建自定义呈现器


EntryRenderer 类公开 OnElementChanged 方法,创建 Xamarin.Forms 控件时调用此方法以呈现对应的本机控件。 此方法采用 ElementChangedEventArgs 参数,其中包含 OldElement 和 NewElement 属性。 这些属性表示 Xamarin.Forms 呈现 Xamarin.Forms 的元素,以及 Xamarin.FormsXamarin.Forms 器附加到的元素。 在示例应用程序中,OldElement 属性将为 null,且 NewElement 属性将包含对 MyEntry 控件的引用。
MyEntryRenderer 类中 OnElementChanged 方法的替代版本可执行本机控件自定义。 可以通过 Control 属性访问平台上使用的对本机控件的类型化引用。 此外,可以通过 Element 属性获取对正在呈现的 Xamarin.Forms 控件的引用,尽管它没有在示例应用程序中使用。
每个自定义呈现器类均用 ExportRenderer 属性修饰,该属性向 Xamarin.Forms 注册呈现器。 该属性采用两个参数:要呈现的 Xamarin.Forms 控件的类型名称和自定义呈现器的类型名称。 属性的 assembly 前缀指示属性适用于整个程序集。
以下各部分讨论每个平台特定的 MyEntryRenderer 自定义呈现器类的实现。

在 iOS 上创建自定义呈现器


以下代码示例展示了适用于 iOS 平台的自定义呈现器:

  1. using Xamarin.Forms.Platform.iOS;
  2. [assembly: ExportRenderer (typeof(MyEntry), typeof(MyEntryRenderer))]
  3. namespace CustomRenderer.iOS
  4. {
  5. public class MyEntryRenderer : EntryRenderer
  6. {
  7. protected override void OnElementChanged (ElementChangedEventArgs<Entry> e)
  8. {
  9. base.OnElementChanged (e);
  10. if (Control != null) {
  11. // do whatever you want to the UITextField here!
  12. Control.BackgroundColor = UIColor.FromRGB (204, 153, 255);
  13. Control.BorderStyle = UITextBorderStyle.Line;
  14. }
  15. }
  16. }
  17. }


对基类的 OnElementChanged 方法的调用实例化 iOS UITextField 控件,并且将对控件的引用分配给呈现器的 Control 属性。 然后,使用 UIColor.FromRGB 方法将背景色设置为淡紫色。

在 Android 上创建自定义呈现器


以下代码示例展示了适用于 Android 平台的自定义呈现器:

  1. using Xamarin.Forms.Platform.Android;
  2. [assembly: ExportRenderer(typeof(MyEntry), typeof(MyEntryRenderer))]
  3. namespace CustomRenderer.Android
  4. {
  5. class MyEntryRenderer : EntryRenderer
  6. {
  7. public MyEntryRenderer(Context context) : base(context)
  8. {
  9. }
  10. protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
  11. {
  12. base.OnElementChanged(e);
  13. if (Control != null)
  14. {
  15. Control.SetBackgroundColor(global::Android.Graphics.Color.LightGreen);
  16. }
  17. }
  18. }
  19. }


对基类的 OnElementChanged 方法的调用实例化 Android EditText 控件,并且将对控件的引用分配给呈现器的 Control 属性。 然后,使用 Control.SetBackgroundColor 方法将背景色设置为淡绿色。

在 UWP 上创建自定义呈现器


以下代码示例展示了适用于 UWP 的自定义呈现器:

  1. [assembly: ExportRenderer(typeof(MyEntry), typeof(MyEntryRenderer))]
  2. namespace CustomRenderer.UWP
  3. {
  4. public class MyEntryRenderer : EntryRenderer
  5. {
  6. protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
  7. {
  8. base.OnElementChanged(e);
  9. if (Control != null)
  10. {
  11. Control.Background = new SolidColorBrush(Colors.Cyan);
  12. }
  13. }
  14. }
  15. }


对基类的 OnElementChanged 方法的调用实例化 TextBox 控件,并且将对控件的引用分配给呈现器的 Control 属性。 然后通过创建 SolidColorBrush 实例将背景色设置为蓝绿色。


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

可输入下拉文本框,据输入,动态加载数据 jquery-editable-select

用到一个jquery-editable-select的控件github地址:https://github.com/indrimuska/jquery-editable-select这个插件的原理是...

渣渣学安卓之时间选择器和文本框操作

一、时间选择器有时候我们做页面时需要时间选择器,先上效果图看了下android studio,没有这个样式的控件,找了下度娘发现...

vue.js 学习日记第四章-vue中文本框数据获取与绑定及computed计算属性

官网:https://cn.vuejs.org/v2/guide/ vue.js学习日记第三章: http://www.tnblog.net/18323015640/article/details/2...

form表单提交验证文本框正则表达式

验证数字:^[0-9]*$验证n位的数字:^\d{n}$验证至少n位数字:^\d{n,}$验证m-n位的数字:^\d{m,n}$验证零和非零开头的数字:...

文本框去掉边框与背景

还是比较简单直接贴代码吧&lt;inputtype=&quot;text&quot;style=&quot;background-color:transparent;border:solid0px;outl...

windoes在文本框中打开软键盘

根据自己所运行项目平台X64和X86来决定你要访问的位数文件夹如果不在需要复制到同等文件里因为我项目是32位的所以文件也要...

js获取文本框,单选框,复选框,下拉列表等值

html:&lt;formid=&quot;form1&quot;runat=&quot;server&quot;&gt; &lt;div&gt; &lt;table&gt; &lt;tr&gt; &lt;td&gt;...

文本框变宽变黑

解决方法:重新设置边框即可border:1pxsolid#d6d6d6得到焦点状态下也是黑色的,如果这个黑色也不想要那就直接加一个这个样...
这一世以无限游戏为使命!
排名
2
文章
657
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术