原文: C#使用Xamarin開發可移植移動應用(5.進階篇顯示彈出視窗與通訊中心)附源碼 前言
系列目錄
C#使用Xamarin開發可移植移動應用目錄源碼位址:
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();
}
最終的效果如圖: