Xamarin中Render的使用

来源:互联网 发布:林萍在日本 淘宝 编辑:程序博客网 时间:2024/05/01 14:33

Render意为渲染,在Xamarin.Forms中,由于目前还不成熟,很多View需要使用原生平台,那么怎么做,才能使Forms里的View具有原生平台对应的特性呢,或者如何在Forms里使用到原生平台上的View呢,Render就可以帮我们做这些事情。如下是我的学习笔记,跟大家分享一下。以Entry为列。(后期随着Forms的不断完善,可能该例子会有些多余,但是今天的分享主要是说明Render的使用)

步骤1、在Forms里声明需要渲染的类,继承View或其子类。

   public class RenderEntry : Entry    {        public static readonly BindableProperty TextFontProperty =              BindableProperty.Create<RenderEntry, Font>(p => p.TextFont, Font.Default);        public Font TextFont        {            get { return (Font)GetValue(TextFontProperty); }            set { SetValue(TextFontProperty, value); }        }    }
上面的代码,继承Entry。因为Entry没有Font这个属性。所以这里定义一个TextFont属性(在原生平台上将渲染这个属性)


步骤2、在Android工程中实现对RenderEntry的渲染。

using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(RenderEntry), typeof(RenderEntry_Droid))]namespace RenderStudy.Droid{     public class RenderEntry_Droid : EntryRenderer    {         RenderEntry sourceView ;         EditText targetView;         protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.View> e)        {            base.OnElementChanged(e);            if (e.OldElement == null)            {                sourceView = (RenderEntry)e.NewElement;                //EditText edit = new EditText(this.Context);                targetView =(EditText)this.Control;                targetView.SetTextSize(Android.Util.ComplexUnitType.Sp, sourceView.TextFont.ToScaledPixel());            }        }         protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)        {            base.OnElementPropertyChanged(sender, e);            if (e.PropertyName == RenderEntry.TextFontProperty.PropertyName)            {                targetView.SetTextSize(Android.Util.ComplexUnitType.Sp, sourceView.TextFont.ToScaledPixel());            }        }     }  }


步骤3、在iOS端实现渲染:

using Xamarin.Forms.Platform.iOS;[assembly: ExportRenderer(typeof(RenderEntry), typeof(RenderEntry_iOS))]namespace <span style="font-family: Arial, Helvetica, sans-serif;">RenderStudy</span><span style="font-family: Arial, Helvetica, sans-serif;">.iOS</span>{    public class RenderEntry_iOS : EntryRenderer    {        RenderEntry sourceView;        UITextField targetView;        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)        {            base.OnElementChanged(e);            if (e.OldElement == null)            {                sourceView = (RenderEntry)e.NewElement;                targetView = (UITextField)Control;                           targetView.Font = sourceView.TextFont.ToUIFont();            }        }
     protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)     {            base.OnElementPropertyChanged(sender, e);            if (e.PropertyName == RenderEntry.HAlignmentProperty.PropertyName)            {<pre name="code" class="csharp">               targetView.Font = sourceView.TextFont.ToUIFont();
} }}


步骤4、使用TextFont属性。(跟其他属性一样的使用,不多做说明)


分享到这里,总结一下,发现在Forms里想要使用到原生平台的东西,有两种方法,一种就是今天分享的Render,还有一种就是DependencyService,前面已经分享过:点击打开链接


注意:直接对View进行渲染时,原生平台上应该继承ViewRender,然后需要设置本地View,SetNativeControl(targetView)。

Render不仅可以对View进行渲染,对Page也是可以进行渲染的,大家可以自己多试试。

欢迎大家添加我的QQ群(365516544)一起学习讨论



1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 欠钱的人跑路了怎么办 美国非婚生子父亲不认怎么办 孕4个月肚子胀气怎么办 8个月孕妇感冒了怎么办 孕8个月感冒鼻塞怎么办 怀孕八个月感冒了怎么办 孕八个月咳嗽了怎么办 享物说同城自提怎么办 锤基意外怀孕怎么办 08 蛐蛐罐底翻砂了怎么办 剑网3中被盗号后怎么办 本人想离婚对方躲避怎么办 微信不能说语音怎么办 微信语音发不了怎么办 吃鸡语音用不了怎么办 要杀我的人见面怎么办 转晕了想吐怎么办 原地转圈头晕恶心想吐怎么办 孩子吃凉的呕吐头还晕怎么办 孩子转晕了想吐怎么办 转圈晕了想吐怎么办 我爸总是骂我妈怎么办 转圈转的想吐怎么办 大便干燥拉不出来怎么办 吹完头发很干燥怎么办 腿摔伤了结痂疼怎么办 蹭wifi被禁止后怎么办 电脑wifi给拉黑怎么办 电脑想用无线网怎么办 中路被对方打崩了怎么办 英雄联盟队友太坑怎么办 匹配被王者虐了怎么办 lol碰到嘴臭的怎么办 小婴儿脾气大怎么办呢? 玩游戏输入法会跳出出来怎么办 逆水寒fps太低怎么办 我dcj没地速怎么办 电焊看久眼睛疼怎么办 装修忘了窗帘盒怎么办? 纹眉导致眼肿了怎么办 哭泣引起的眼肿怎么办