C#使用Xamarin开发可移植移动应用(5.进阶篇显示弹出窗口与通讯中心)附源码
系列目录
源码地址:https://github.com/l2999019/DemoApp
可以Star一下,随意 - -
说点什么..
没啥好说的.开干吧.
今天的学习内容?
今天的内容比较简单.
就几个弹出框和内置的消息通讯中心.
如图:

1.xamarin中的弹出窗
xamarin帮我们把各个系统的弹出窗做了2个统一的类.
1.DisplayAlert
2.DisplayActionSheet
我们就来一一看看
DisplayAlert,其实很简单,就是一个类似于HTML的alert的弹出层.当然,你也可以作为commit来使用,代码如下:
alert的使用方式:
private void Button_Clicked(object sender, EventArgs e)
{
DisplayAlert("提示", "这里是提示信息", "确定");
}
commit的使用方式:
private async void Button_Clicked_3(object sender, EventArgs e)
{
var date = await DisplayAlert("提示", "你确定要选择这个按钮么?", "确定","取消");
await DisplayAlert("提示", "选中了"+date, "确定");
}
DisplayActionSheet其实是一个多选的弹出层,你可以设置其中的选项,然后自定义下面的按钮,代码如下:
private async void Button_Clicked_1(object sender, EventArgs e)
{
var action = await DisplayActionSheet("请选择分享到的位置", "取消", null, "QQ空间", "微博", "微信");
await DisplayAlert("提示", "选中了" + action, "确定");
}
第一个参数是标题内容,第二第三个参数为按钮,后面的参数为选项
下面是带2个按钮的代码例子:
private async void Button_Clicked_2(object sender, EventArgs e)
{
var action = await DisplayActionSheet("请选择内容", "取消", "删除", "QQ空间", "微博", "微信");
await DisplayAlert("提示", "选中了" + action, "确定");
}
2.Xamarin中的消息通讯中心( MessagingCenter)
MessagingCenter允许视图模型和其他组件进行通信,而不需要知道任何关于彼此的信息.
嗯,上面一句是官方的解释.
MessagingCenter分2个角色,一个叫做订阅者(Subscriber),一个叫做发送者(Sender).
意思就已经很明确了,订阅者先订阅消息,然后发送者根据业务情况,来发送消息,让订阅者接收,以方便做一些事情.
MessagingCenter可以用于:用户交互(如按钮点击),系统事件(如控制更改状态)或其他事件(如异步下载完成)。
订阅者可能需要接收以改变用户界面的外观,保存数据或触发其他操作。
MessagingCenter有以下API,我们就来一一讲解.
- Subscribe<TSender> (object subscriber, string message, Action<TSender> callback, TSender source = null)
- Subscribe<TSender, TArgs> (object subscriber, string message, Action<TSender, TArgs> callback, TSender source = null)
- Send<TSender> (TSender sender, string message)
- Send<TSender, TArgs> (TSender sender, string message, TArgs args)
- Unsubscribe<TSender, TArgs> (object subscriber, string message)
- Unsubscribe<TSender> (object subscriber, string message)
Subscribe当然就是订阅的方法了,里面有3个必填参数,订阅对象,信息,回调函数.
Send当然就是发送,2-3个参数,第一个是发送者,信息,回调函数的参数..
Unsubscribe 就是取消订阅.
举个栗子,我需要在跳转页面的同时传递一个消息给一个Page,并根据参数改变他的界面,那么我们就在接收的Page中创建一个订阅.
代码如下:
MessagingCenter.Subscribe<MainPage, string>(this, "Hello", (obj, item) => {
DisplayAlert("提示", "传过来的参数为" + item, "确定");
this.lab.Text = item;
lab.TextColor = Color.Red;
});
然后,我们在前一个页面跳转之后发送这个消息.
private void Button_Clicked_10(object sender, EventArgs e)
{ Navigation.PushAsync(new DisplayingAlertsPages()); MessagingCenter.Send<MainPage, string>(this, "Hello", "消息~~~"); }
在Page的释放事件中取消这个订阅
protected override void OnDisappearing()
{
MessagingCenter.Unsubscribe<MainPage, string>(this, "Hello");
base.OnDisappearing();
}
最终的效果如图:

C#使用Xamarin开发可移植移动应用(5.进阶篇显示弹出窗口与通讯中心)附源码的更多相关文章
- C#使用Xamarin开发可移植移动应用(3.进阶篇MVVM双向绑定和命令绑定)附源码
前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 嗯..前面 ...
- C#使用Xamarin开发可移植移动应用(4.进阶篇MVVM双向绑定和命令绑定)附源码
前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 嗯..前面 ...
- iOS开发技巧 - 使用Alerts和Action Sheets显示弹出框
解决方案: (Swift) 使用UIAlertController类 (Objective-C) 使用UIAlertView类 代码: (Swift) import UIKit class ViewC ...
- C# 使用Xamarin开发Android应用程序
C#使用Xamarin开发可移植移动应用终章(11.获取设备信息与常用组件,开源一个可开发模版.) 摘要: 前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://gi ...
- C#使用Xamarin开发移动应用 ---- 系列文章
C#使用Xamarin开发移动应用 C#使用Xamarin开发可移植移动应用终章(11.获取设备信息与常用组件,开源一个可开发模版.) C#使用Xamarin开发可移植移动应用进阶篇(10.综合演练, ...
- C#使用Xamarin开发可移植移动应用(1.入门与Xamarin.Forms页面),附源码
前言 什么是Xamarin? Xamarin始创于2011年,旨在使移动开发变得难以置信地迅捷和简单. Xamarin的产品简化了针对多种平台的应用开发,包括iOS.Android.Windows P ...
- C#使用Xamarin开发可移植移动应用(2.Xamarin.Forms布局,本篇很长,注意)附源码
前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 一点感想 很意外的,第一 ...
- C#使用Xamarin开发可移植移动应用目录
Xamarin.Android系列 C#开发移动应用系列(1.环境搭建) C#开发移动应用系列(2.使用WebView搭建WebApp应用) C#开发移动应用系列(3.使用照相机扫描二维码+各种基础知 ...
- C#使用Xamarin开发可移植移动应用(3.Xamarin.Views控件)附源码
前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. .NET ...
随机推荐
- mysql常见的优化方法
1.选取适当的字段属性.例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任 ...
- 学习java应该了解一些html超文本标记语言(前端)
在自己学习的过程中遇到一些内容,怕忘记所以借助博客加深印象也方便查找! html超文本标记语言中,分行级元素和块级元素. 行级元素的含义:行级元素不独占一行,相邻的行级元素在一行排列:行级元素可以控制 ...
- Struts2从头到脚--学习笔记(自认为比较重要的)
一. Struts2框架介绍 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与 ...
- 自然饱和度(Vibrance)算法的模拟实现及其SSE优化(附源码,可作为SSE图像入门,Vibrance算法也可用于简单的肤色调整)。
Vibrance这个单词搜索翻译一般振动,抖动或者是响亮.活力,但是官方的词汇里还从来未出现过自然饱和度这个词,也不知道当时的Adobe中文翻译人员怎么会这样处理.但是我们看看PS对这个功能的解释: ...
- CONSOLE_SCREEN_BUFFER_INFO 结构体
CONSOLE_SCREEN_BUFFER_INFO结构体 来源:https://msdn.microsoft.com/en-us/library/ms682093(v=vs.85).aspx 作用 ...
- css层叠样式表
css的三种声明方式 1.行内样式 通过每个标签都有的style属性 <div style="color:red;">黄卫星说没有内容 ...
- 关于在HTML中使用的script标签
本文是<JavaScript高级程序设计>(第三版)中的第二章的个人学习的总结. 在HTML中使用JavaScript <script>标签 在HTML5中script主要有以 ...
- RedHat Enterprise Linu…
RedHat Enterprise Linux 6.4 使用Centos 6 的yum 源问题 2015.04.09 一.问题描述 有时在使用RedHat 系统进行安装某些软件时,会出现如下提示: T ...
- Ubuntu 16.04 LTS安装 TeamViewer
Ubuntu 16.04 LTS安装 TeamViewer 64位Ubuntu 16.04系统需要添加32位架构支持,命令如下. sudo dpkg --add-architecture i3 ...
- jsp页面中某个src,如某个iframe的src,应该填写什么?可以是html、jsp、servlet、action吗?是如何加载的?
jsp页面中某个src,如某个iframe的src,应该填写什么?可以是html.jsp.servlet.action吗?是如何加载的? 如有个test工程,其某个jsp中有个iframe,代码如下: ...