什么是 Xamarin Forms ?

Xamarin Forms 是一个高效创建跨平台用户界面的库 。通过Xamarin Forms 能够一次编码生成基于主流移动平台(iOS, Android, Windows Phone)的应用界面。和HTML 5 不同, 它是一套原生的界面解决方式,这意味着通过Xamarin
Forms 渲染的界面是与底层API 紧密相连, 那你能够结合诸如iOS 中的Core Motion , PassKit 还有StoreKit 这些API 使用 ,也能够使用诸如NFC / Google Play Service 的Android API ,当然少不了Windows Phone 的Tiles 。

Xamarin Forms 的优势

通过一次编码,生成多平台界面。假若你做的工作涉及到三个平台,那你会对重反复复的界面逻辑工作厌烦,Xamarin Forms 真的是一个不错的解决方式。

使用 Xamarin Forms 

你能够通过C#硬编码方式去架构你的界面,还有你能够通过XAML方式去构建。

Xamarin Forms 能适配的界面

Pages (页面)

Layout(布局)

Controls(控件)

好来看看一个简单的样例,因为这篇文章仅仅是初探,我仅仅会把部分精彩的节录下来,大家能够下载代码细看。假设要探究就继续关注我的blog , 接下来会陆续有关于Xamarin Forms 的更深入文章。

1. 创建Xamarin.Forms 项目

这里须要说明一点,Xamarin Forms项目有两种模版一种是基于Share Project ,一种是基于PCL ,这里要看各自项目的须要,我默认选取PCL(关于两个模版的使用,我会在之后文章和大家说说)

2. 创建成功后,会生成包括CnBetaDemo.Shared,CnBetaDemo.iOS, CnBetaDemo.Android 三个项目(假设你用Visual Studio 创建你就会有CnBetaDemo.Windows Phone 的项目) 。 CnBetaDemo.Shared就是我们须要处理的共享逻辑层和Xamarin.Forms。其余两个就是我们所须要相应的平台。

3.根据MVVM 方式架构我们的CnBetaDemo.Shared , 这里不得不提到Xamarin 的原理 。Xamarin 是一个基于共享逻辑层的跨平台原生应用方案。

为何用MVVM 在我之前文章有所提及。(博客决定放到csdn,我会迁移后贴上地址)。之前一年的做法是把逻辑共享,如今能够把页面通过Xamarin.Forms进行构造就可以,所以CnBetaDemo.Shared就成为了我们跨平台架构项目的核心代码层。

4.  简单看看ViewModel层 ,这里我以读取CnBeta RSS 为例 ,FeedViewModel 的一些主要代码:

主要通过async和await 的方式载入数据

		private async Task ExecuteLoadItemsCommand()
{
if (isBusy)
return; IsBusy = true; try{ var httpClient = new HttpClient(); var feed="http://cnbeta.feedsportal.com/c/34306/f/624776/index.rss"; var responseString = await httpClient.GetStringAsync(feed); FeedItems.Clear(); var items= await ParseFeed(responseString); foreach(var item in items)
{ //Console.WriteLine(item.Title);
FeedItems.Add(item);
}
}
catch(Exception ex){ var page = new ContentPage (); var result = page.DisplayAlert ("出错 ", "载入失败.", "确认", null); } IsBusy = false; }
                private async Task<List<FeedItem>> ParseFeed(string rss)
{
return await Task.Run (() => {
var xdoc=XDocument.Parse(rss); var id=0; return ( from item in xdoc.Descendants("item")
select new FeedItem
{
Title = (string)item.Element("title"),
Description=(string)item.Element("description"),
PublishDate=(string)item.Element("pubDate"),
Id= id++
}).ToList();
});
}

5. 通过Xamarin Forms 构造View

这里须要创建一个简单的表单ListView, 和自己定义Cell, 当然Xamarin Forms会依然平台进行对应渲染生成原生的表单支持

	public class FeedView : ContentPage
{
private FeedViewModel ViewModel{
get { return BindingContext as FeedViewModel; }
} public FeedView ()
{ BindingContext = new FeedViewModel (); var stack = new StackLayout {
Orientation= StackOrientation.Vertical,
Padding = new Thickness(0,8,0,8)
}; var listView = new ListView (); listView.ItemsSource = ViewModel.FeedItems; var cell = new DataTemplate (typeof(ListTextCell)); cell.SetBinding (TextCell.TextProperty, "Title"); cell.SetBinding (TextCell.DetailProperty, "PublishDate"); listView.ItemTemplate = cell; stack.Children.Add (listView); Content = stack;
} protected override void OnAppearing()
{
base.OnAppearing (); if (ViewModel == null || !ViewModel.CanLoadMore || ViewModel.IsBusy || ViewModel.FeedItems.Count > 0)
return; ViewModel.LoadItemsCommand.Execute (null);
}
}

6. 执行看看

非常Cool吧 !!哈哈!! 欢迎大家下载我的代码看看 点击下载

对于Xamarin 本人一直非常推崇,有了Xamarin Forms更如虎添翼。这里须要排除价格,当然假设是在企业真的能够节省不少。或者你是一个Objective-C 的支持者, 或者是一个Java开发Android的深度码农,可是无可否认Xamarin 能够解决得很多其它。

非常开心在CSDN和大家分享,接下来博客在这里安家,也希望大家多和我交流,谢谢!

Xamarin.Forms 初探的更多相关文章

  1. 老司机学新平台 - Xamarin Forms开发框架二探 (Prism vs MvvmCross)

    在上一篇Xamarin开发环境及开发框架初探中,曾简单提到MvvmCross这个Xamarin下的开发框架.最近又评估了一些别的,发现老牌Mvvm框架Prism现在也支持Xamarin Forms了, ...

  2. 【转】Xamarin Forms 介绍

    特此声明,本篇博文转自:http://blog.csdn.net/kinfey/article/details/29621381 什么是 Xamarin Forms ? Xamarin Forms 是 ...

  3. xamarin.forms新建项目android编译错误

    vs2015 update3 新建的xamarin.forms项目中的android项目编译错误.提示缺少android_m2repository_r22.zip,96659D653BDE0FAEDB ...

  4. Xamarin.Forms 简介

    An Introduction to Xamarin.Forms 来源:http://developer.xamarin.com/guides/cross-platform/xamarin-forms ...

  5. Xamarin.Forms 免费电子书

    Xamarin Evolve 正在举行,现在已经放出2本免费的Xamarin.Forms 免费电子书,据现场的同学说这两天还有Xamarin.Forms 重磅消息发布: Creating Mobile ...

  6. 老司机学新平台 - Xamarin Forms开发框架之MvvmCross插件精选

    在前两篇老司机学Xamarin系列中,简单介绍了Xamarin开发环境的搭建以及Prism和MvvmCross这两个开发框架.不同的框架,往往不仅仅使用不同的架构风格,同时社区活跃度不同,各种功能模块 ...

  7. 使用Xamarin.Forms平台开发移动应用指南

    下载书:链接: http://pan.baidu.com/s/1c29H9KG 密码: 7esm 注:捣鼓虚拟机把Hyper-V关闭,后来Xamarin搞挂了,所以暂停翻译. 第1章 Xamarin. ...

  8. Xamarin.Forms.Platform.Perspex, Xamarin Forms 的 Perspex(号称下一代WPF) 实现

    Perspex, 跨平台的UI框架,加上Xamarin Forms的跨平台的中间层,这样同一套代码就可跨几乎所有已知平台,这其中包括旧版Windows, Linux及Mac OS. 目前,基本控件可显 ...

  9. 为 Xamarin.Forms 做个跑马灯控件

    前段时间,私下用 Xamarin.Forms 做了个商业项目的演示版.很多被国内App玩坏了的控件/效果,XF上都没有或是找不到对应的实现,没有办法只能亲自上阵写了几个,效果还行,就是有BUG. 这个 ...

随机推荐

  1. js+html+css简单的互动功能页面(2015知道几乎尖笔试题)http://v.youku.com/v_show/id_XMTI0ODQ5NTAyOA==.html?from=y1.7-1.2

    js+html+css实现简单页面交互功能(2015知乎前端笔试题) http://v.youku.com/v_show/id_XMTI0ODQ5NTAyOA==.html? from=y1.7-1. ...

  2. 学习FFmpeg API – 解码视频

    本文转载 视频播放过程 首先简单介绍以下视频文件的相关知识.我们平时看到的视频文件有许多格式,比如 avi, mkv, rmvb, mov, mp4等等,这些被称为容器(Container), 不同的 ...

  3. oracle表空间查询维护命令大全之三(暂时表空间)史上最全

    --UNDO表空间汇总 --查看全部的表空间名字 SELECT NAME FROM V$TABLESPACE; --创建新的UNDO表空间,并设置自己主动扩展參数; CREATE UNDO TABLE ...

  4. MFC调试小技巧

    今天看acl源码的时候看到一个函数AllocConsole().百度一下感觉这个函数对于调试非常不错,当然对于MFC里面的调试信息,我都是用TRACE打印自己感兴趣的消息的,而且仅仅有在DEBUG里面 ...

  5. SecureCRT 6.7.1 RI和谐 皴 补丁 方法

    它之前被使用SecureCRT 6.5.3 版本号,咋看和谐补丁,即使中国版本也可(现在才发现SecureCRT.6.2.0) 可是换为 6.7.1 后就怎么也注冊不了了.. 没办法试了各种办法: 先 ...

  6. 微信电脑版(Mac和Windows)安装

    内容简介 1.微信Windows版 2.微信Mac版 3.总结优势 微信电脑版 众所周知,腾讯公司(马化腾先生执掌的巨头公司)开发的超成功App:微信.一经推出便引发业界轰动,使用人数更是直逼QQ. ...

  7. 构建安全的Xml Web Service系列之wse之错误代码详解

    原文:构建安全的Xml Web Service系列之wse之错误代码详解 WSE3.0现在还没有中文版的可以下载,使用英文版的过程中,难免会遇到各种各样的错误,而面对一堆毫无头绪的错误异常,常常会感到 ...

  8. sort和qsort排序

    qsort(数组名,数组长度,数组中每个元素大小,compare); compare函数的写法决定了排序是升序还是降序.需要#include<stdlib.h> 例如: int compa ...

  9. java提高篇(五)-----使用序列化实现对象的拷贝

          我们知道在Java中存在这个接口Cloneable,实现该接口的类都会具备被拷贝的能力,同时拷贝是在内存中进行,在性能方面比我们直接通过new生成对象来的快,特别是在大对象的生成上,使得性 ...

  10. Gray Code -- LeetCode

    原标题链接: http://oj.leetcode.com/problems/gray-code/  这道题要求求出n位的格雷码相应的二进制数,主要在于找到一种格雷码的递增方法(格雷码并非唯一的,能够 ...