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()); } } } }
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
- Xamarin中Render的使用
- zend_controller_action中initView()与render()的使用
- ruby on rails 中render的使用
- yii 中render 和renderpartial的使用
- grails中render、respond、redirect的使用
- vue Render中slots的使用
- Vue中render方法的使用
- Xamarin.Android 中 Handler 的使用
- 第八章:vue2中render与ref的使用
- 3.Xamarin.Forms中布局控件的使用
- Xamarin中wcf的引用
- Xamarin.Android 照相机的使用
- unity的forward rendering 中光源的使用和light的render mode
- Xamarin android中使用signalr实现即时通讯
- DirectShow中写render filter的问题
- CakePHP中render,redirect,dispatch 的区别
- ZendFrame中render, _forward , _redirect 的区别
- opengl 中render()的问题
- C++气泡
- 新手入门程序必须克服的5个障碍
- linux下vi命令大全
- 如何将灰度图像中大于阈值的区域标记成红色
- Eclipse 相关操作之快捷键整理
- Xamarin中Render的使用
- Dependency Walker使用说明
- Paypal mobile sdk 支付报错
- CC_CALLBACK原理及应用
- GUI编程及文件对话框的使用
- 程序员修炼之道-从小工到专家读后感
- 顺推金额操作
- jks2pfx-java证书转为.net证书
- tomcat 产生heapdump文件配置