自定义xamarin.forms Entry 背景色以及边框
-
创建
一个Xamarin.Forms自定义控件。
自定义Entry控件可以通过继承来创建Entry控制,显示在下面的代码示例:
public
class
MyEntry : Entry { }
-
消费
从Xamarin.Forms自定义控件。
该MyEntry控制可在XAML通过宣布其位置的命名空间,使用控制元素的命名空间前缀引用在PCL项目。 下面的代码示例显示了如何MyEntry控制可以通过一个XAML页面消耗:
<ContentPage ...
xmlns:local="clr-namespace:CustomRenderer;assembly=CustomRenderer"
...>
...
<local:MyEntry
Text="In Shared Code"
/>
...
</ContentPage>
在local名称空间前缀可以任意取名。 然而, clr-namespace和assembly值必须自定义控件的细节相匹配。 一旦命名空间声明的前缀用于引用自定义控制。下面的代码示例显示了如何MyEntry控制可以通过一个C#页面消耗:
public
class
MainPage : ContentPage
{
public
MainPage ()
{
Content
=
new
StackLayout {
Children
= {
new
Label {
Text
=
"Hello, Custom Renderer !",
},
new
MyEntry {
Text
=
"In Shared Code",
}
},
VerticalOptions
=
LayoutOptions.CenterAndExpand,
HorizontalOptions
=
LayoutOptions.CenterAndExpand,
};
}
}
此代码实例化一个新ContentPage对象,将显示一个Label ,并MyEntry控制在页面上居中垂直和水平。
自定义渲染器现在可以添加到每个应用程序项目,以定制控件的每个平台上亮相。
-
创建
为每个平台上的控制自定义渲染器
3.1 创建的子类EntryRenderer呈现本地控制类。
3.2 覆盖OnElementChanged呈现本机控制方法和编写逻辑来定制控制。 建立相应的Xamarin.Forms控制时,此方法被调用。
3.3 一个添加ExportRenderer属性自定义渲染类来指定,它11会被用来渲染Xamarin.Forms控制。 这个属性是用来注册Xamarin.Forms定制的渲染器。
它是可选的,以提供在每个平台项目定制渲染器。 如果自定义渲染器没有被注册,那么将使用该控件的基类的默认渲染。
下图说明在示例应用程序的每个项目的责任,与他们之间的关系一起:
该MyEntry控制是通过特定于平台的呈现MyEntryRenderer类,全部由获得EntryRenderer每个平台类。 这导致每个MyEntry控制正在呈现与特定于平台的背景颜色,显示在下面的截图:
该EntryRenderer类公开OnElementChanged方法,以使相应的本地控制在创建Xamarin.Forms控制时被调用。 该方法获取ElementChangedEventArgs包含参数OldElement和NewElement属性。 这些属性代表了Xamarin.Forms元素渲染器附着于和Xamarin.Forms元素渲染器分别连接到。 在示例应用程序的OldElement属性将为null和NewElement属性将包含的参考MyEntry控制。
在一个重写版本OnElementChanged的方法MyEntryRenderer类是执行本机控制定制的地方。 类型化参考本地控制平台上使用可通过访问Control特性。 此外,向Xamarin.Forms控制的基准是的被呈现可通过获得Element属性,尽管它不是在示例应用程序使用。
每个自定义渲染器类装饰着ExportRenderer的注册与Xamarin.Forms渲染属性。 该属性有两个参数 - 所呈现的Xamarin.Forms控件的类型名称,自定义渲染器的类型名称。 该assembly前缀属性指定属性适用于整个组件。
以下各节讨论每个特定平台的实施MyEntryRenderer定制渲染器类。
创建iOS上的自定义呈现
下面的代码示例显示了iOS平台的自定义呈现:
using
Xamarin.Forms.Platform.iOS;
[assembly: ExportRenderer (typeof(MyEntry), typeof(MyEntryRenderer))]
namespace
CustomRenderer.iOS
{
public
class
MyEntryRenderer : EntryRenderer
{
protected
override
void
OnElementChanged (ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged (e);
if (Control
!=
null) {
// do whatever you want to the UITextField here!
Control.BackgroundColor
=
UIColor.FromRGB (204, 153, 255);
Control.BorderStyle
=
UITextBorderStyle.Line;
}
}
}
}
基类的调用OnElementChanged方法实例在iOS UITextField控制,对控制的引用被分配到渲染器的Control性能。 然后将背景颜色设置为浅紫色与UIColor.FromRGB方法。
创建Android上的自定义呈现
下面的代码示例显示了Android平台定制的渲染器:
using
Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer (typeof(MyEntry), typeof(MyEntryRenderer))]
namespace
CustomRenderer.Android
{
class
MyEntryRenderer : EntryRenderer
{
protected
override
void
OnElementChanged (ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged (e);
if (Control
!=
null) {
Control.SetBackgroundColor (global::Android.Graphics.Color.LightGreen);
}
}
}
}
基类的调用OnElementChanged方法实例化一个Android EditText控制,对控制的引用被分配到渲染器的Control性能。 然后将背景颜色设置为浅绿色与Control.SetBackgroundColor方法。
写在后边的话
为了符合要求,需要有边框效果所以参考资料如下:
https://forums.xamarin.com/discussion/18056/border-radius-and-border-on-entry
上代码"
using Xamarin.Forms.Platform.Android;
using Xamarin.Forms;
using CustomRenderer;
using Android.Graphics.Drawables;
[assembly: ExportRenderer (typeof(MyEntry), typeof(MyEntryRenderer))]
namespace CustomRenderer
{
class
MyEntryRenderer : EntryRenderer
{
protected
override
void OnElementChanged (ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged (e);
if (Control != null) {
GradientDrawable gd = new
GradientDrawable();
gd.SetColor(Android.Graphics.Color.Green);
gd.SetCornerRadius(10);
gd.SetStroke(10, Android.Graphics.Color.LightGray);//边框宽度和边框颜色
this.Control.SetBackgroundDrawable(gd);
}
}
}
}
自定义xamarin.forms Entry 背景色以及边框的更多相关文章
- Xamarin.Forms 自定义控件(呈现器和效果)
Xamarin.Forms 使用目标平台的本机控件呈现用户界面,从而让 Xamarin.Forms 应用程序为每个平台保留了相应的界面外观.凭借效果,无需进行自定义呈现器实现,即可自定义每个平台上的本 ...
- Xamarin.Forms 简介
An Introduction to Xamarin.Forms 来源:http://developer.xamarin.com/guides/cross-platform/xamarin-forms ...
- Xamarin.Forms入门-使用 Xamarin.Forms 来创建跨平台的用户界面
Xamarin.Forms 是一个跨平台的.基于原生控件的UI工具包,开发人员可以轻松的创建适用于 Android,iOS 以及 Windows Phone的用户界面.Xamarin.Forms 通过 ...
- Xamarin.Forms 开发资源集合(复制)
复制:https://www.cnblogs.com/mschen/p/10199997.html 收集整理了下 Xamarin.Forms 的学习参考资料,分享给大家,稍后会不断补充: UI样式 S ...
- Xamarin.Forms 开发资源集合
收集整理了下 Xamarin.Forms 的学习参考资料,分享给大家,稍后会不断补充: UI样式 Snppts: Xamarin Forms UI Snippets. Prebuilt Templat ...
- Xamarin Forms:小马过河,王者归来
因为我媳妇的原因,去年下半年从零开始学习Android原生开发,做了一个答题库app.整体给我的感觉是入门难度不大,前期折腾一番,大部分时间都是花在开发上面,其实任何一门语言都是如此. 今年我又有另一 ...
- Xamarin.forms 自定义tabview控件
一 问题描述 forms本身ui代码是翻译为平台原生代码,forms按照xaml技术进行对android和ios两种ui模型进行公共抽象出了几种page和view,在空杯博客已经有详细介绍 http: ...
- Xamarin.Forms 自定义 TapGestureRecognizer 附加属性
While creating Xamarin.Forms applications, definitely you are going to need TapGestureRecognizer oft ...
- Xamarin.Forms之样式
使用XAML样式设置Xamarin.Forms应用的样式Xamarin.Forms应用程序的样式传统上是通过使用Style类将一组属性值分组到一个对象中来完成的,然后可以将其应用于多个视觉元素实例. ...
随机推荐
- 解决"the currently displayed page contains invalid values"
原因是你的工程的根目录少了default.properties(有点项目工程这个文件名称是project.properties)这个文件,导致不能选择target: 解决办法: 在工程根目录下建立 ...
- 从Delphi 7升级到Delphi XE
Delphi 7和XE中间有好几个版本号,可都不太流行,一是由于Delphi有些边缘化,二是7在XP环境下是近乎完美的版本号.市场上关于delphi的书越来越少,提供从7升级到XE介绍的资料差点儿没用 ...
- tomcat URL简写案例:模拟站点www.baidu.com的訪问
tomcat URL简写案例:模拟站点 * 实际URL:http://www.baidu.com:8080/myweb/1.html * 实际位置:F:\mywebapps\myweb\1.htm ...
- android 怎样内置/预置/预编译文件(运行程序,应用程序,apk, jar, lib 等随意文件)到系统中
方法一: 如果要内置的软件名称为iperf.exe 1. 将iperf.exe放到Codebase的随意一个文件夹下(该文件夹必须可以在搜索Android.mk时被搜索到),比方system/ipe ...
- jq實現網頁個性title
<!DOCTYPE html> <html content="text/html; charset=UTF-8"> <title>tooltip ...
- U盘启动安装CentOS 6.3
无光驱U盘启动安装CentOS 6.3的一些必要条件: 1.主板要支持U盘启动 2.8G的U盘 3.UltraISO软件 http://www.linuxidc.com/Linux/2010-03/2 ...
- 解除网页右键限制和开启网页编辑状态的js代码
当访问页面右键被限制了怎么办?很好办!将以下代码添加进收藏夹,点击执行即可: javascript:alert(document.onselectstart = document.onbeforeco ...
- 洛谷 P1273 有线电视网(dp)
/* 想了半天没想出状态 自己还是太弱了 QAQ 题目问的是最多供给多少户 一般想法是把这个值定义为状态量 没想出来QAQ....看了看题解的状态 很机智.... f[i][j]表示i的子树 选了j个 ...
- java之迭代器
迭代这个名词对于熟悉Java的人来说绝对不陌生.我们常常使用JDK提供的迭代接口进行java collection的遍历: Iterator it = list.iterator();while(it ...
- jquer “$” 扩展(笔记)
/** * Created by shanruo on 16-03-10. */ (function ( $ ){ $.extend ({ /* * 根据参数名获取参数 @name String 参数 ...