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

前言

什么是Xamarin?

Xamarin始创于2011年,旨在使移动开发变得难以置信地迅捷和简单。

Xamarin的产品简化了针对多种平台的应用开发,包括iOS、Android、Windows Phone和Mac App。

Xamarin由许多著名的开源社区开发者创立和参与,而且也是Mono项目的主导者——C#与·NET框架的开源、跨平台实现。

(以上摘自百度百科)

那么什么是Xamarin.Forms?

(意思就是可移植的UI)

本系列介绍了Xamarin.Forms开发的基础知识,涵盖了多平台和多屏应用的构建。

Xamarin.Forms是一个允许开发人员快速创建跨平台UI界面的框架。

它为iOS,Android,Windows或Windows Phone上的原生UI呈现给用户的界面提供了自己的抽象。

这意味着你的应用程序可以共享大部分用户界面代码.

Xamarin.Forms允许快速创建应用程序,随着时间的推移,应用程序可以演变为复杂的应用程序。

由于Xamarin.Forms应用程序是原生应用程序,因此它没有其他的使用限制。

使用Xamarin.Forms编写的应用程序能够利用原生平台的任何API或功能.

例如(但不限于)iOS上的CoreMotion,PassKit和StoreKit; NFC和Android上的Google Play服务;

在Xamarin.Forms中创建UI界面有两种技术。

第一种技术是用C#源码创建UI。

第二种技术是使用可扩展应用程序标记语言(XAML),这是一种用于描述用户界面的声明式标记语言。有关XAML的更多信息,请参阅XAML基础知识。

为什么要学习Xamarin.Forms?

在移动应用发展迅速的今天,我们的APP必须要兼容多个平台,且APP的构建,主要还是构建界面(业务逻辑一般放在服务去处理)

当然,WebApp可以解决这个问题.

但是不排除我们会需要用原生的APP,然而原生的APP开发,主流平台就少不了iOS、Android、Windows10 Phone(..嗯..这个,算主流吧?好歹还活着 - -,)

每个平台我们都需要构建一次我们的界面,很繁琐,且知识点太多,学习入门会很难.所以Xamarin.Forms应运而生,一次编写,多平台编译.

 

今天的学习内容?

今天主要学习Xamarin.Forms中提供的各类页面,如图:

效果如下:

 

正文

1.创建跨平台的可移植项目

   首先我们先新建一个项目,具体如图:

  

第二步我们选择如下:

注意:这里一定要选择可移植的类库(PCL),因为共享项目新建页面的时候有点问题,所以不推荐

点击OK,我们就可以得到如下几个程序集

我们可以看到,第一个是可移植的,这里就是我们要编写代码的地方,

下面2个,一个安卓,一个IOS,如果你使用调试安卓,就设置他为启动项.

如果你想调试IOS,那么你就设置下面的为启动项.(需要Mac)

因为我们编写的是跨平台的项目,所以,我们一般不需要编写下面2个程序集(当然,有些特殊情况是需要的).

项目创建完成,我们就可以编写我们的代码了.

 

1.ContentPage(内容页)

 

进入我们的项目我们会发现已经帮我们创建好了一些必须会使用到的页面如图:

每个xaml下面都对应着一个cs文件,是不是和我们的windowForm很相似呢~

App.xaml中的代码,我们先不管,他类似于windowForm中的Program.cs,是帮我们启动项目用的.

我们先进入MainPage.xaml中,会发现他继承了我们本节要讲的ContentPage.

所以,其实已经很明显了,它就是最基础的页面,类似于安卓开发的Activity,

我们所开发基础界面,都需要继承它.

它只是一个内容容器,并不具体的呈现任何东西,需要配合各类控件才能展现画面.

我们进入到xaml中,在<ContentPage>标签下编写代码:

    <StackLayout><Button Text="打开CarouselPage" Clicked="Button_Clicked"></Button><Button Text="打开MasterDetailPage" Clicked="Button_Clicked_1"></Button><Button Text="打开TabbedPageTest" Clicked="Button_Clicked_2"></Button></StackLayout>

效果如图:

 

 

 

2.CarouselPage(滑动页)

 这个页面主要是滑动效果,他里面可以放置多个内容页.

效果如图:

xaml代码如下:

<CarouselPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="DemoApp.CarouselPage.CarouselPageTest"><ContentPage><StackLayout><Label Text="Red" /><BoxView Color="Red" VerticalOptions="FillAndExpand" /></StackLayout></ContentPage><ContentPage><StackLayout><Label Text="Green" /><BoxView Color="Green" VerticalOptions="FillAndExpand" /></StackLayout></ContentPage><ContentPage><StackLayout><Label Text="Blue" /><BoxView Color="Blue" VerticalOptions="FillAndExpand" /></StackLayout></ContentPage></CarouselPage>

解释一下,上面的xaml代码,我们放置了3个内容页,第一个为红色填充,第二个为绿填充,第三个为蓝填充.

我们在来看看后台代码:

 public partial class CarouselPageTest :Xamarin.Forms.CarouselPage{        public CarouselPageTest(){InitializeComponent();}}

我们只是继承了一下Xamarin.Forms.CarouselPage,就很简单的可以实现一个多页面的滑动

我们回到MainPage,编写Button_Clicked事件如下:

        private void Button_Clicked(object sender, EventArgs e){Navigation.PushModalAsync(new CarouselPage.CarouselPageTest());}

这样,就能跳转到我们的滑动页了

 

3.MasterDetailPage(主次页面)

手机QQ大家一定都用过,当你点击头像的时候,就会弹出部分次页面,主页面则会隐藏.

效果如图:

这是一个很有用的基础页面,我们在很多APP中应该都见过.

我们看看来如何使用它.

我们直接新建项.如图选择:

点击添加,会添加4个文件,如图:

我们一个个来讲解.

首先,第一个MasterDetailPageTest.是整个页面的主入口(注意,这里说的是入口)

只有它继承了Xamarin.Forms.MasterDetailPage,

我们看看他的xaml,如图:

会发现他包含了2个属性,一个是Master(你的主页面) 一个Detail(你的次页面)

其他的标签,我们先不谈,后面会讲.

然后我们在来看看MasterDetailPageTestMaster与MasterDetailPageTestDetail,会发现,他们都继承的是ContentPage

所以,其实他们只是单纯的内容页而已~

这样,我们就完成了一个基础的MasterDetailPage.

同样我么回到MainPage,编写Button_Clicked1事件如下:

 private void Button_Clicked_1(object sender, EventArgs e){Navigation.PushModalAsync(new MasterDetailPage.MasterDetailPageTest());}

 

 

 

4.TabbedPage(Tab页面)

 也是我们很常见的,tab标签页面效果如下:

 

同样,我们先来创建这个TabbedPage.如图:

然后,我们进入它的xaml标签中,添加内容如下:


<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"x:Class="DemoApp.TabbedPage.TabbedPageTest"><!--Pages can be added as references or inline--><ContentPage Title="标签1"><Label Text="标签1内容"></Label></ContentPage><ContentPage Title="标签2" ><Label Text="标签2内容"></Label></ContentPage><ContentPage Title="标签3" ><Label Text="标签3内容"></Label></ContentPage></TabbedPage>


同样,大家可以看到,这里面就是三个ContentPage.

这样,就会自动生成标签页了.

这里有个需要注意的地方.TabbedPage所生成的页面,IOS和安卓会有所区别,如下:

IOS的标签会在下面,安卓的根据谷歌给出APP应用程序建议,会在上面...

国内很多App在这点上并没有遵循谷歌给的意见,都会统一放在下面. (在后续的章节里会讲,如何重写它,让安卓的也统一在下面). 

写在最后

前面我写过一个系列是关于Xamarin.Android的,导致很多朋友都以为,Xamarin只能开发安卓  - -,我很方..

地址如下:

C#开发移动应用系列(4.调用系统应用,以及第三方应用(调用与被调用))

说一下为什么先写Xamarin.Android,因为你要开发移动APP,对于一些移动开发概念的了解是必须的,并不是说..你会了C# .NET..就可以了..

所以先用Xamarin.Android入门...这样才能更快,更好的理解可移植的Xamarin.Form.

本系列源码地址:https://github.com/l2999019/DemoApp

不出意外..以后的内容,都会直接更新在这个项目里

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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java不需要使用Javafx的Application也能将Node导出图片

一、Java通用导出Javafx Chart图片 Javafx不需要使用Application也能导出图片&#xff0c;使用PlatformImpl.startup方法初始化Javafx的Toolkit。 Javafx API并不是所有机器都支持的&#xff0c;Node导出图片不一定成功。&#xff08;如&#xff1a;无法初始化Javafx的Toolki…

layui上传图片,前端直接拷代码,后端……

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号【雄雄的小课堂】。最近实在是忙的抽不开身&#xff0c;并且身上也出现了一堆的毛病&#xff0c;今天牙疼&#xff0c;明天脊椎疼&#xff0c;然后接着又头疼……年纪轻轻的&#xff0c;咋这么多毛病呢&#xff1f;我也在…

ASP.NET Core 源码学习之 Options[3]:IOptionsSnapshot

2017-06-28 更新&#xff1a;OptionsSnapshot 已改为 OptionsManager 变更详情IOptionsCache 已改为 IOptionsMonitorCache 变更详情 在 上一章 中&#xff0c;介绍了 IOptions 的使用&#xff0c; 而我们知道&#xff0c;在 ConfigurationBuilder 的 AddJsonFile 中&#xff0…

layui结合ajax实现下拉联动效果

大家好好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号&#xff1a;雄雄的小课堂。 昨天分享的是使用layui集合springboot实现图片上传&#xff0c;文章地址在这里&#xff0c;需要的小伙伴们可以去看看&#xff1a; 今天给大家分享的内容也是那天在造项目的时候完成的&am…

ASP.NET Core MVC – Caching Tag Helpers

简介 缓存可以大大提高应用程序加载时间和响应速度。我们可以使用缓存Tag Helpers缓存不会频繁更改的HTML内容。 在上一篇文章ASP.NET Core MVC Tag Helpers 介绍中&#xff0c;我们谈到了Tag Helpers&#xff0c;演示Tag Helpers能做什么、如何使用它们以及一些最常用的Tag …

layui结合ajax实现下拉菜单联动效果

大家好好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号&#xff1a;雄雄的小课堂。昨天分享的是使用layui集合springboot实现图片上传&#xff0c;文章地址在这里&#xff0c;需要的小伙伴们可以去看看&#xff1a;今天给大家分享的内容也是那天在造项目的时候完成的&#x…

ASP.NET Core 源码学习之 Options[4]:IOptionsMonitor

前面我们讲到 IOptions 和 IOptionsSnapshot&#xff0c;他们两个最大的区别便是前者注册的是单例模式&#xff0c;后者注册的是 Scope 模式。而 IOptionsMonitor 则要求配置源必须是可监听的&#xff0c;用来实现 Options 实例的自动更新&#xff0c;并对外提供了 OnChage 事件…

Layui hint: Table element property lay-data configuration item has a syntax error解决方式

今天在使用layui的数据表格时&#xff0c;报错Layui hint: Table element property lay-data configuration item has a syntax error&#xff0c;找了好几中解决方式&#xff0c;网上说的用{}括起来。 对于我来说都不适应哎&#xff0c;我发现我的问题比较低级。 源代码&…

ASP.NET Core MVC – Form Tag Helpers

简介 我们已经介绍过Tag Helpers以及一些最常用的Tag Helpers&#xff0c;也谈到了缓存Tag Helpers。在这篇文章中&#xff0c;我们将讨论表单Tag Helpers。 HTML或Web表单通过使用各种HTML元素用于收集来自用户的输入&#xff0c;如输入框、复选框、单选按钮、下拉列表等。使…

表单提交报错405的解决方式

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号&#xff1a;雄雄的小课堂。今天&#xff0c;分享一个bug的解决的方法&#xff0c;到最后解决了也不知道为啥这样是可以的&#xff0c;原来的方法是不可以的……01问题描述项目中有这样的一个需求&#xff0c;就是在原来的…

JavaFX图表(二)之饼图

翻译自 JavaFX - 饼图 饼图是将值表示为具有不同颜色的圆的切片。标记这些切片&#xff0c;并且在图表中表示与每个切片对应的值。 以下是一张饼图&#xff0c;描绘了一个实例中各公司的移动销售情况。 在JavaFX中&#xff0c;饼图由名为PieChart的类表示。该类属于包javaf…

RabbitMQ(mall项目学习 死信、延迟队列)

文章目录RabbitMQ的死信队列RabbitMQ的延迟队列mall项目 业务场景说明Rabbitmq 插件实现延迟队列启动&#xff08; UI 界面 &#xff09;RabbitMQ的死信队列 TTL&#xff1a;time to live 消息存活时间 如果消息在存活时间内未被消费&#xff0c;则会被清除 RabbitMQ⽀持两种…

asp.net中条件查询+分页

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号&#xff1a;雄雄的小课堂。 今天&#xff0c;分享的是asp.net中条件查询分页的小案例。 如下图所示&#xff1a; 各个功能模块均已标注&#xff0c;先大致介绍一下业务。 \1. 点击左侧图书类别&#xff0c;根绝类别编…

.NET Standard@Xamarin.Forms

编者语 &#xff1a; .NET技术社群由于微软的开源和跨平台性越来越受关注&#xff0c;但国内都是碍于大家以往的认识阻碍了发展&#xff0c;没有太多大的企业敢于去把.NET作为第一生产力。你作为.NET程序员有义务去保护好你的饭碗&#xff0c;也要改变人对.NET的认知。希望大家…

JavaFX图表(一)

翻译自 JavaFX - 图表 通常&#xff0c;图表是数据的图形表示。有各种各样的图表来表示数据&#xff0c;如条形图&#xff0c;饼图&#xff0c;折线图&#xff0c;散点图等。 JavaFX支持各种饼图和XY图表。在XY平面上表示的图表包括AreaChart&#xff0c;BarChart&#xff0…

我们在进行着一场拔河比赛……

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号【雄雄的小课堂】。不知不觉&#xff0c;3班已经面临就业了。似乎每个班级到三期的最后阶段&#xff0c;出现的问题都那么类似&#xff0c;那就是一部分同学已经“放弃努力”了&#xff0c;大家貌似在等着最后的就业&…

JavaFX图表(三)之折线图

翻译自 JavaFX - 折线图 折线图或折线图将信息显示为由直线段连接的一系列数据点&#xff08;标记&#xff09;。折线图显示数据如何以相等的时间频率变化。 以下是描绘不同年份学校数量的折线图。 在JavaFX中&#xff0c;折线图由名为LineChart的类表示。该类属于包javafx…

释放.NET Big Memory和内存映射文件的能量

要点&#xff1a; 通常Web服务器具有的内存远远超过了.NET GC在正常情况下可以有效处理的量。缓存服务器的性能优势通常会因增加了网络成本而下降。内存映射文件通常是在系统重新启动后填充缓存的最快方式。服务器端调优的目的是出站网络连接达到饱和的程度。 通过最小化CPU、…

3班的第二次模拟面试

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号【雄雄的小课堂】。今天&#xff0c;三班进行了第二次模拟面试&#xff0c;还是和第一次一样&#xff0c;分为技术面试和人事面试&#xff0c;不过这次不一样的一点就是我亲自面的大部分开发学生。通过这次模拟面试&#…

JavaFX图表(四)之面积图

翻译自 JavaFX - 面积图 面积图用于绘制基于区域的图表。它绘制给定系列点与轴之间的区域。通常&#xff0c;此图表用于比较两个数量。 以下是一张区域图表&#xff0c;描绘了一个星期内两个人消耗的水果数量。 在JavaFX中&#xff0c;Area图表由名为AreaChart的类表示。该类…