本篇..基本可以算是Xamarin在应用开发过程中的核心了..真的很很很重要..

想学习的..想用的..建议仔细阅读..嗯..打酱油的 ..快速滑倒下面点个推荐 - - 哈哈哈...

今天的学习内容?

只讲一个,关于Xamarin.Forms针对各个平台如何进行可定制化的控件操作.

也就是针对某个平台的细颗粒化操作.

废话不多说,我们直接开始.

正文

1.什么是渲染器

自定义渲染器提供了一种强大的方法来定制Xamarin.Forms控件的外观和行为。它们可用于一些微小的样式更改或复杂的平台特定布局和行为定制。

2.为什么需要自定义渲染器

因为在不使用自定义渲染器的情况下更改Xamarin.Forms控件的外观是颗粒度较粗的.

因为Xamarin.Forms为了支持多个平台同时可用,所以对一些特定平台的增强功能和自定义功能进行了删减。所以当我们需要使用这些功能时,就必须实现自定义渲染器。

3.如何使用自定义渲染器

下面我们首先来通过一个例子来讲解如何使用渲染器.

我们找到一个Xamarin控件,比如ProgressBar进度条..它在Xamarin中,可控的属性应该就只有Progress进度而已..

我们编写代码如下:

<ProgressBar Progress=".5" BackgroundColor="Blue"   />

得到如下效果:

这里,我们特意给它加了一个蓝色的背景..来展示整个控件的大小..

我们会发现,进度条只是他里面很小的一部分,大部分被背景占用,而且无法在Xamarin.Forms中去修改,我们无法改变它的高度.

那么,我们如何修改它呢?..这时候就要用自定义渲染器了,到特点的平台去优化它

首先我们在可移植的库中自定义一个ProgressBar,方便Xamarin.Forms调用,代码如下:

 public class MyProgressBar: ProgressBar
{
}

就这样,就足够了,我们只需要继承一下原来的ProgressBar即可..

然后我们到安卓的平台下,添加自定义的渲染器.,记得,是安卓的平台,在这个类库下:

添加渲染器,代码如下:

//表示使用 Xamarin.Forms在使用MyProgressBar的时候,用MyProgressBarRenderer渲染替换[assembly: ExportRenderer(typeof(MyProgressBar), typeof(MyProgressBarRenderer))]namespace DemoApp.Droid
{   

  public class MyProgressBarRenderer:ProgressBarRenderer{         protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.ProgressBar> e){            base.OnElementChanged(e);Control.ScaleY = 10; //改变Y轴大小           Control.SetPadding(-0, -12, 0, -12);}}
}

上面的代码有2个关键的地方,一个是需要在命名空间上申明,你需要代替渲染的控件.

第二个是,你需要继承相关的渲染基类,比如我们这里用的ProgressBarRenderer

我们可以看看这里基类里面继承了一些什么,如下:

我们可以看到,在安卓库中,它就继承了安卓widget的原生进度条,那么,原生进度条的所有属性,我们就都是可以用的了.

比如我们在代码中写的 "ScaleY" 这种属性和SetPadding这种方法.,所以前面我一直强调的,有些东西 你找了安卓(IOS)的解决方案,就同样找到了Xamarin的

我这里虽然没有IOS的环境,但是我们也可以到IOS里面看看ProgressBarRenderer继承了什么,如下:

熟悉IOS开发的同学应该很清楚了..Uikit..就是IOS的用户界面

在上面的代码中,我们针对安卓平台,修改了他的Y轴高度和内边距的值,我们如何使用呢?如下:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"xmlns:loact="clr-namespace:DemoApp.MyRenderer"x:Class="DemoApp.ViewsDomePage"><ContentPage.Content><loact:MyProgressBar Progress=".6" BackgroundColor="Red"  /><ProgressBar Progress=".5" BackgroundColor="Blue" MinimumHeightRequest="-20" HeightRequest="-1"  /></ContentPage.Content></ContentPage>

我们在ContentPage 中,先引入我们自定的命名空间,调用名改为loact.

然后就直接loact:MyProgressBar,就可以了和原来几乎没区别.

然后我们看看运行效果,如下:

我们可以看到,虽然我们也给了红色的背景,但是它只显示在进度条中了,不会让控件很高, SetPadding起了作用.

当然,我们能操作的远远不止这些..

下面直接给上一个我搭好的基础框架的效果吧...嗯 还使用了一下百度地图的原生SDK.

写在最后

嗯..也没啥好说的了. 后面慢慢加深.

相关文章:

  • C#使用Xamarin开发可移植移动应用(1.入门与Xamarin.Forms页面),附源码

  • .NET Standard@Xamarin.Forms

  • C#使用Xamarin开发可移植移动应用(2.Xamarin.Forms布局,本篇很长,注意)附源码

  • C#使用Xamarin开发可移植移动应用(3.Xamarin.Views控件)附源码

  • C#使用Xamarin开发可移植移动应用(4.进阶篇MVVM双向绑定和命令绑定)附源码

  • C#使用Xamarin开发可移植移动应用(5.进阶篇显示弹出窗口与通讯中心)附源码

原文地址:http://www.cnblogs.com/GuZhenYin/p/7428017.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

C#使用Xamarin开发可移植移动应用进阶篇(6.使用渲染器针对单个平台自定义控件),附源码相关推荐

  1. C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码

    我记得,之前在写安卓方面的文章的时候,有人就问过我.Xamarin.Android为什么打包出来这么大?随便一个HelloWord就20-30MB? 嗯..今天我们就来解决这个问题.. 我们先从指定一 ...

  2. C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码...

    C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码 原文:C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码 前言 系列 ...

  3. C#使用Xamarin开发可移植移动应用进阶篇(10.综合演练,来一份增删改查CRUD)

    说点什么.. 呃 也有半个月没更新了. 本来这篇的Demo早就写完了,文章也构思好了.迟迟没发布..是因为实在太忙.. 项目要上线..各种  你们懂的.. 正赶上自己十一人生大事..结婚..所以..忙 ...

  4. C#使用Xamarin开发可移植移动应用进阶篇(9.混淆代码,防止反编译)

    嗯,既然是客户端应用,自然而然就需要一些防止源码泄漏的手段.通过C#编写的APP,完全是可以直接解压APK,然后得到里面的DLL然后进行反编译的.. 如下图: 嗯..这样就会造成代码泄漏.. 下面就介 ...

  5. C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码

    本篇..基本可以算是Xamarin在应用开发过程中的核心了..真的很很很重要.. 想学习的..想用的..建议仔细阅读..嗯..打酱油的 ..快速滑倒下面点个推荐 - - 哈哈哈... 今天的学习内容? ...

  6. 使用Xamarin开发手机聊天程序 -- 基础篇(大量图文讲解 step by step,附源码下载)

    如果是.NET开发人员,想学习手机应用开发(Android和iOS),Xamarin 无疑是最好的选择,编写一次,即可发布到Android和iOS平台,真是利器中的利器啊!而且,Xamarin已经被微 ...

  7. C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码...

    原文:C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码 前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github. ...

  8. 仿酷狗音乐播放器开发日志二十二 动态调色板控件第二版(性能大幅提升附源码)...

    转载请说明原出处,谢谢~~ 在上次写的博客<仿酷狗音乐播放器开发日志二十一 开发动态调色板控件(附源码)>发布后,我在群里和网友讨论这个控件的性能和优 缺点,发现了他很多不足,还有很多提升 ...

  9. [安全攻防进阶篇] 四.逆向分析之条件语句和循环语句源码还原及流程控制逆向

    从2019年7月开始,我来到了一个陌生的专业--网络空间安全.初入安全领域,是非常痛苦和难受的,要学的东西太多.涉及面太广,但好在自己通过分享100篇"网络安全自学"系列文章,艰难 ...

最新文章

  1. 结队作业,小学生3年级数学题出题器
  2. add_compile_options和CMAKE_CXX_FLAGS的区别
  3. C语言 extern - C语言零基础入门教程
  4. 蓝桥杯:2018年第九届蓝桥杯省赛B组第七题—螺旋折线
  5. 北京赛区参赛选手代表吴翼在开幕式上的发言稿完整版2011年11月02日 09:50:34
  6. 基于 DHT 网络的磁力链接和BT种子的搜索引擎架构
  7. 单片微型计算机原理和应用答案,《单片微机原理及应用》 试卷A及参考答案
  8. 请客必备:【转】100元以内南宁市有特色的餐馆
  9. Yii2汉字转拼音类
  10. C什么k什么_K线基础——什么是MACD?
  11. CI、CD、Pipeline 概念
  12. AE效果器(Effect)开发
  13. 【微信小程序---如何引入阿里巴巴图标步骤】
  14. 五、C语言指针和数组
  15. 总结27 -- E45: ‘readonly‘ option is set (add ! to override)
  16. android系统最近删除照片,安卓手机最近删除的照片怎么恢复?专家教你这样做...
  17. 雷达感应智能窗帘,雷达感应模组方案,家居智能化交互体验
  18. 海洋主题绘画_儿童画创意 | 三个海洋主题课例分享,超有创意的教程
  19. CANoe自动化测试系统 简介
  20. 杰里695N系列(soundbox)之0.0 开发环境搭建

热门文章

  1. GoLang学习笔记——data_type
  2. java基础巩固笔记(6)-注解
  3. 宏在使用过程余函数的区别1
  4. 快速配置Ehcache
  5. Gallery with Video
  6. 简单而不简陋﹣wp7视觉点滴
  7. 一些微服务拆分的浅见
  8. 大会线上同步直播, 来不到现场也可以线上看直播,以及参会秘籍
  9. 使用keepalived搭建双机热备高可用一览
  10. Istio 2020 年 Roadmap——一切为了商用