XAML in Xamarin.Forms 基礎篇 電子書

XAML in Xamarin.Forms 基礎篇 電子書
XAML in Xamarin.Forms 基礎篇 電子書

Xamarin.Forms 快速入門 電子書

Xamarin.Forms 快速入門 電子書
Xamarin.Forms 快速入門 電子書

2018/08/09

在 Xamarin.Forms 使用 SkiaSharp 來進行 2D 圖形繪製 1

根據微軟官方文件 SkiaSharp 簡介 上的說明,SkiaSharp 提供豐富且功能強大 2D 圖形 API,可用來呈現到 2D 的緩衝區。 您可以使用這些來實作自訂使用者介面項目和可整合到您的應用程式的 2D 圖形。 SkiaSharp 是.NET 繫結至Skia程式庫會繼承此文件庫的強大的功能。這也就是說,您可以建立一個 SKCanvasView 控制項,我們便擁有了一個畫布,使用 SkiaSharp 所提供的相關 API,即可以開發出繪製出各種效果的圖片。
想要能夠使用 SkiaSharp API 各項功能,首先,您需要知道在 SkiaSharp 裡面的座標系統與尺寸單位定義;左上角是這個畫布的原點,越往右邊, X 軸的值越大,越往下面,Y 軸的值越大;另外,在 SKCanvasView 控制項內,若要執行任何繪製圖形的 API,其標示尺寸單位畫素 Pixel。
在我們這個練習範例中,我們在 XAML 中,建立了三個 SKCanvasView 控制項,其指定的寬度與高度分別為 80x200,在 XAML 中所指定的高度與寬度的單位為 與裝置無關的畫素,也就是會依據您當時執行的裝置之螢幕縮放比與當時裝置螢幕的解析度,經過換算之後,所得到的值,在我們針對 Android 專案執行的時候,當時使用的 Android 模擬器的縮放比為 2.65,那麼,也就是說,這個 SKCanvasView 控制項內可以使用的畫素為 80 x 2.65 (W) / 200 x 2.65 (H) = 212 (W) / 530 (H),若您呼叫 SkiaSharp API 進行繪圖的時候,超過這個寬度與高度,您所繪製的圖形將不會顯示在螢幕上。
xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:skia="clr-namespace:SkiaSharp.Views.Forms;assembly=SkiaSharp.Views.Forms"
             x:Class="XFSkiaSharp.Views.MainPage"
             Title="SkiaSharp 練習">

    <StackLayout
        Orientation="Vertical"
        >
        <Label
            x:Name="label1"/>
        <Label
            x:Name="label2"/>
        <Label
            x:Name="label3"/>
        <StackLayout 
            Orientation="Horizontal"
            HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand">

            <BoxView
                x:Name="boxview"
                Color="LightBlue"
                WidthRequest="80" HeightRequest="200"/>

            <skia:SKCanvasView
                x:Name="canvasView"
                WidthRequest="80" HeightRequest="200"
                PaintSurface="OnCanvasViewPaintSurface"/>

            <skia:SKCanvasView
                WidthRequest="80" HeightRequest="200"
                PaintSurface="OnCanvasViewPaintSurfaceScale"/>

            <skia:SKCanvasView
                WidthRequest="80" HeightRequest="200"
                PaintSurface="OnCanvasViewPaintSurfaceScale2"/>
        </StackLayout>
    </StackLayout>

</ContentPage>
想要取得 SKCanvasView 控制項的有效高度與寬度尺寸畫素,可以在該控制項 SKCanvasView 的 OnCanvasViewPaintSurface 事件內,透過該事件的參數 SKPaintSurfaceEventArgs.Canvas 取得當時畫布的可用畫素 Pixel。
我們在這裡了解幾個 SkiaSharp API 用法,首先是把畫布完全清空,在這裡,我們可以呼叫 SKPaintSurfaceEventArgs.Canvas.Clear() 方法即可。若要指定要繪製圖形的畫筆顏色或者填滿背景顏色等等,可以建立一個 SKPaint 物件,指定相關屬性值即可。在這裡,我們會繪製出一個有顏色填滿的矩形,我們可以使用 SKPaintSurfaceEventArgs.Canvas.DrawRect(0, 0, 80, 200, paint); 這個方法,這裡將會指定要在 SKCanvasView 畫布內,繪製出寬度為 80 畫素,高度為 200 畫素的矩形。由上面所提到的,若在螢幕縮放比為 2.65 的裝置上,執行這 DrawRect API ,所繪製出來的矩形,將不會完全佔據整個 SKCanvasView 控制項,而是一小塊,且位於該畫布左上較區域的一個矩形,會造成這樣的情況,那是因為該畫布可用的畫素為 212 (W) / 530 (H)。這裡所提到的執行結果與相關程式碼,可以參考這個 OnCanvasViewPaintSurface 事件內的程式碼。
不過,這樣可以能對於要進行畫布上進行呼叫 SkiaSharp 繪圖 API 時候,產生一些困擾,這裡可以參考 OnCanvasViewPaintSurfaceScale 這個事件內的程式碼,在這裡,我們使用了這個程式碼,指定繪製出一個矩形 float fooScale = 2.65f; SKPaintSurfaceEventArgs.Canvas.DrawRect(0, 0, 80 * fooScale, 200 * fooScale, paint); ;您可以看到,我們把要繪製的 80W x 200H 的矩形,放大了 2.65 倍率,也就是要指定 SkiaSharp 繪製出 212W x 530H ,這樣,就可以繪製出充滿整個 SKCanvasView 控制項的矩形圖形了。
當然,您會覺得這樣的使用方式還是很不方便,我們每次都需要自行來計算要繪製的座標點與尺寸的縮放倍率,此時,您可以參考 OnCanvasViewPaintSurfaceScale2 事件內的用法,在這裡,我們完全都使用 與裝置無關的畫素 作為標示尺寸的單位,在這裡,我們只要在呼叫任何 SkiaSharp API 之前,先執行這樣的程式碼 SKPaintSurfaceEventArgs.Canvas.Scale(2.65f); 這樣,我們一樣呼叫 SKPaintSurfaceEventArgs.Canvas.DrawRect(0, 0, 80, 200, paint); API,這樣所繪製出來的矩形,也是充滿整個畫布的。
C#
using SkiaSharp;
using SkiaSharp.Views.Forms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;

namespace XFSkiaSharp.Views
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }
        void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args)
        {
            SKImageInfo info = args.Info;
            SKSurface surface = args.Surface;
            SKCanvas canvas = surface.Canvas;

            canvas.Clear();

            SKPaint paint = new SKPaint
            {
                Style = SKPaintStyle.Fill,
                Color = SKColors.LightBlue,
                StrokeWidth = 1,

            };
            canvas.DrawRect(0, 0, 80, 200, paint);

            label1.Text = $"SKCanvasView Independent Pixel= {canvasView.Width} x {canvasView.Height} ";
            label2.Text = $"SKCanvasView Pixel= {canvasView.CanvasSize.Width} x {canvasView.CanvasSize.Height} ";
            label3.Text = $"SKCanvasView Scale = {canvasView.CanvasSize.Width / canvasView.Width} x {canvasView.CanvasSize.Height / canvasView.Height} ";
        }
        void OnCanvasViewPaintSurfaceScale(object sender, SKPaintSurfaceEventArgs args)
        {
            SKImageInfo info = args.Info;
            SKSurface surface = args.Surface;
            SKCanvas canvas = surface.Canvas;

            canvas.Clear();

            float fooScale = 2.65f;
            SKPaint paint = new SKPaint
            {
                Style = SKPaintStyle.Fill,
                Color = SKColors.LightBlue,
                StrokeWidth = 1,

            };
            canvas.DrawRect(0, 0, 80 * fooScale, 200 * fooScale, paint);
        }
        void OnCanvasViewPaintSurfaceScale2(object sender, SKPaintSurfaceEventArgs args)
        {
            SKImageInfo info = args.Info;
            SKSurface surface = args.Surface;
            SKCanvas canvas = surface.Canvas;

            canvas.Clear();

            SKPaint paint = new SKPaint
            {
                Style = SKPaintStyle.Fill,
                Color = SKColors.LightBlue,
                StrokeWidth = 1,

            };
            canvas.Scale(2.65f);
            canvas.DrawRect(0, 0, 80, 200, paint);
        }
    }
}
  • Android 平台執行結果
    SkiaSharp
  • UWP 平台執行結果
    SkiaSharp

關於 Xamarin 在台灣的學習技術資源

Xamarin 實驗室 粉絲團
歡迎加入 Xamarin 實驗室 粉絲團,在這裡,將會經常性的貼出各種關於 Xamarin / Visual Studio / .NET 的相關消息、文章、技術開發等文件,讓您可以隨時掌握第一手的 Xamarin 方面消息。
Xamarin.Forms @ Taiwan
歡迎加入 Xamarin.Forms @ Taiwan,這是台灣的 Xamarin User Group,若您有任何關於 Xamarin / Visual Studio / .NET 上的問題,都可以在這裡來與各方高手來進行討論、交流。
Xamarin 實驗室 部落格
Xamarin 實驗室 部落格 是作者本身的部落格,這個部落格將會專注於 Xamarin 之跨平台 (Android / iOS / UWP) 方面的各類開技術探討、研究與分享的文章,最重要的是,它是全繁體中文。
+

Xamarin.Forms 系列課程
Xamarin.Forms 系列課程 想要快速進入到 Xamarin.Forms 的開發領域,學會各種 Xamarin.Forms 跨平台開發技術,例如:MVVM、Prism、Data Binding、各種 頁面 Page / 版面配置 Layout / 控制項 Control 的用法等等,千萬不要錯過這些 Xamarin.Forms 課程



開啟某些舊的 Xamarin.Forms 要進行執行,發生這些錯誤訊息 : No resource found that matches the given name

在五月左右進行 Xamarin.Forms 課程教學的時候,經常會發生這樣的問題,不過,那個時候比較忙,沒有時間進行將這個問題整理出來,今天正好要來撰寫 SkiaSharp 的使用文章,因此,打開了之前寫好的範例專案,接著進行 Android 專案的建置,此時,出現了下圖錯誤:
No resource found that matches the given name
上圖的錯誤訊息文字如下所示
錯誤        No resource found that matches the given name: attr 'windowNoTitle'.    XFSkiaSharp.Android    D:\Vulcan\GitHub\xamarin-forms-sample2018\XFSkiaSharp\XFSkiaSharp\XFSkiaSharp.Android\Resources\values\styles.xml    2    
錯誤        No resource found that matches the given name: attr 'windowActionModeOverlay'.    XFSkiaSharp.Android    D:\Vulcan\GitHub\xamarin-forms-sample2018\XFSkiaSharp\XFSkiaSharp\XFSkiaSharp.Android\Resources\values\styles.xml    4    
錯誤        No resource found that matches the given name: attr 'windowActionBar'.    XFSkiaSharp.Android    D:\Vulcan\GitHub\xamarin-forms-sample2018\XFSkiaSharp\XFSkiaSharp\XFSkiaSharp.Android\Resources\values\styles.xml    2    
錯誤        No resource found that matches the given name: attr 'colorPrimaryDark'.    XFSkiaSharp.Android    D:\Vulcan\GitHub\xamarin-forms-sample2018\XFSkiaSharp\XFSkiaSharp\XFSkiaSharp.Android\Resources\values\styles.xml    2    
錯誤        No resource found that matches the given name: attr 'colorPrimary'.    XFSkiaSharp.Android    D:\Vulcan\GitHub\xamarin-forms-sample2018\XFSkiaSharp\XFSkiaSharp\XFSkiaSharp.Android\Resources\values\styles.xml    2    
錯誤        No resource found that matches the given name: attr 'colorAccent'.    XFSkiaSharp.Android    D:\Vulcan\GitHub\xamarin-forms-sample2018\XFSkiaSharp\XFSkiaSharp\XFSkiaSharp.Android\Resources\values\styles.xml    3    
錯誤        No resource found that matches the given name: attr 'colorAccent'.    XFSkiaSharp.Android    D:\Vulcan\GitHub\xamarin-forms-sample2018\XFSkiaSharp\XFSkiaSharp\XFSkiaSharp.Android\Resources\values\styles.xml    4    
錯誤        Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light.Dialog'.    XFSkiaSharp.Android    D:\Vulcan\GitHub\xamarin-forms-sample2018\XFSkiaSharp\XFSkiaSharp\XFSkiaSharp.Android\Resources\values\styles.xml    4    
錯誤        Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light.DarkActionBar'.    XFSkiaSharp.Android    D:\Vulcan\GitHub\xamarin-forms-sample2018\XFSkiaSharp\XFSkiaSharp\XFSkiaSharp.Android\Resources\values\styles.xml    2
大部分的人遇到這樣的錯誤訊息的時候,大多會束手無策,而且似乎找不到好的方法可以解決這個問題,在這裡,可以根據我的作法,施展大絕招來解決此一問題
  • 請先使用滑鼠右擊方案節點,選擇 清除方案 選項
    Clean Visual Studio Solution
  • 清除完成後,可以建置 Android 專案,您會發現會得到一樣的錯誤訊息
  • 現在,請關閉 Visual Studio 2017 程式
  • 重新開啟 Visual Studio 2017,並且打開這個相同專案
  • 請重新建置這個 Android 專案
  • 您將會發現到您已經可以成功建立這個 Android 專案了,在輸出視窗內,將會看到底下的訊息
    1>------ 已開始全部重建: 專案: XFSkiaSharp, 組態: Debug Any CPU ------
    1>XFSkiaSharp -> D:\Vulcan\GitHub\xamarin-forms-sample2018\XFSkiaSharp\XFSkiaSharp\XFSkiaSharp\bin\Debug\netstandard2.0\XFSkiaSharp.dll
    2>------ 已開始全部重建: 專案: XFSkiaSharp.Android, 組態: Debug Any CPU ------
    2>  XFSkiaSharp.Android -> D:\Vulcan\GitHub\xamarin-forms-sample2018\XFSkiaSharp\XFSkiaSharp\XFSkiaSharp.Android\bin\Debug\XFSkiaSharp.Android.dll
    2>  沒有辦法解決 "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 和 "mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e" 之間的衝突。任意選擇 "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"。
    ========== 全部重建: 2 成功、0 失敗、 0 略過 ==========
    

關於 Xamarin 在台灣的學習技術資源

Xamarin 實驗室 粉絲團
歡迎加入 Xamarin 實驗室 粉絲團,在這裡,將會經常性的貼出各種關於 Xamarin / Visual Studio / .NET 的相關消息、文章、技術開發等文件,讓您可以隨時掌握第一手的 Xamarin 方面消息。
Xamarin.Forms @ Taiwan
歡迎加入 Xamarin.Forms @ Taiwan,這是台灣的 Xamarin User Group,若您有任何關於 Xamarin / Visual Studio / .NET 上的問題,都可以在這裡來與各方高手來進行討論、交流。
Xamarin 實驗室 部落格
Xamarin 實驗室 部落格 是作者本身的部落格,這個部落格將會專注於 Xamarin 之跨平台 (Android / iOS / UWP) 方面的各類開技術探討、研究與分享的文章,最重要的是,它是全繁體中文。
Xamarin.Forms 系列課程
Xamarin.Forms 系列課程 想要快速進入到 Xamarin.Forms 的開發領域,學會各種 Xamarin.Forms 跨平台開發技術,例如:MVVM、Prism、Data Binding、各種 頁面 Page / 版面配置 Layout / 控制項 Control 的用法等等,千萬不要錯過這些 Xamarin.Forms 課程



2018/08/07

Xamarin.Essentials 體驗 6 : Connectivity 連線

根據 Xamarin.Essentials 官方文件中指出:Xamarin.Essentials 跨平台應用程式開發介面的開發人員提供他們的行動應用程式。透過 Xamarin.Essentials 的套件幫忙,可以將這些功能整合到您的應用程式:加速計 應用程式資訊 電池 剪貼簿 指南針 資料傳輸 裝置顯示資訊 裝置資訊 電子郵件 檔案系統的協助程式 手電筒 地理編碼 地理位置 迴轉儀 磁力計 開啟瀏覽器 電話撥號員 喜好設定 螢幕鎖定 安全儲存體 SMS 文字轉換語音 追蹤版本 震動。
我們現在來體驗關於 Connectivity 連線 這項功能,因此,可以參考底下的專案範例,該專案範例

建立測試專案

  • 首先,我們先使用 Prism Template Pack 擴充功能所提供的專案樣板,建立起一個 Xamarin.Forms 專案,在這裡我們僅選擇 Android / iOS / UWP 類型的專案;接著,我們需要把 PropertyChanged.Fody NuGet 套件安裝到 .NET Standard 專案類別庫內,並且安裝 FodyWeavers.xml 檔案。
  • 緊接著,我們要開始安裝 Xamarin.Essentials NuGet 套件到所有的專案內,在這裡,請使用滑鼠右擊方案節點,選擇 管理方案的 NuGet 套件 選項
  • 請在 NuGet - 解決方案 的視窗中,輸入要搜尋的套件名稱 : Xamarin.Essentials
    並且,請勾選 包括搶鮮版 的文字檢查盒,並且安裝這個套件;我寫這篇文章的時候, Xamarin.Essentials 的最新版本為 0.9.1-preview 版本,因此,我們安裝這個版本。
    Xamarin Essentials NuGet Installation
  • 當 Xamarin.Essentials 套件安裝完成之後,您將會發現到在 Visual Studio 2017 的錯誤視窗中,出現了底下錯誤訊息
Warning
偵測到 Xamarin.Android.Support.Compat 的版本衝突。請直接從專案參考套件,以解決此問題。 
 XFEFConnectivity.Android -> XFEFConnectivity -> Xamarin.Essentials 0.9.1-preview -> Xamarin.Android.Support.CustomTabs 27.0.2 -> Xamarin.Android.Support.Compat (= 27.0.2) 
 XFEFConnectivity.Android -> Xamarin.Android.Support.Design 25.4.0.2 -> Xamarin.Android.Support.Compat (= 25.4.0.2).
偵測到 Xamarin.Android.Support.Compat 的版本衝突
  • 現在讓我們來修正這個錯誤,在這裡,我使用了 Visual Studio Code 開啟了 Android 專案下的 .csproj 檔案,請搜尋這個關鍵字 PackageReference Include="Xamarin.Essentials"
    此時,您將會看到底下的內容
XML
  <ItemGroup>
    <PackageReference Include="Xamarin.Essentials">
      <Version>0.7.0.17-preview</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Forms" Version="2.5.0.122203" />
    <PackageReference Include="Xamarin.Android.Support.Design" Version="25.4.0.2" />
    <PackageReference Include="Xamarin.Android.Support.v7.AppCompat" Version="25.4.0.2" />
    <PackageReference Include="Xamarin.Android.Support.v4" Version="25.4.0.2" />
    <PackageReference Include="Xamarin.Android.Support.v7.CardView" Version="25.4.0.2" />
    <PackageReference Include="Xamarin.Android.Support.v7.MediaRouter" Version="25.4.0.2" />
    <PackageReference Include="Prism.Unity.Forms" Version="7.0.0.396" />
  </ItemGroup>
  • 我們需要將 Xamarin.Android.Support.xxx 的套件,全部都變更成從 "25.4.0.2" 到 "27.0.2.1"
    修改完成結果如下所示,請進行存檔該 .csproj 檔案,並且回到 Visual Studio 2017 下,此時,將會重新載入這個 Android 專案
XML
  <ItemGroup>
    <PackageReference Include="Xamarin.Essentials">
      <Version>0.7.0.17-preview</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Forms" Version="2.5.0.122203" />
    <PackageReference Include="Xamarin.Android.Support.Design" Version="27.0.2.1" />
    <PackageReference Include="Xamarin.Android.Support.v7.AppCompat" Version="27.0.2.1" />
    <PackageReference Include="Xamarin.Android.Support.v4" Version="27.0.2.1" />
    <PackageReference Include="Xamarin.Android.Support.v7.CardView" Version="27.0.2.1" />
    <PackageReference Include="Xamarin.Android.Support.v7.MediaRouter" Version="27.0.2.1" />
    <PackageReference Include="Prism.Unity.Forms" Version="7.0.0.396" />
  </ItemGroup>
  • 現在,我們需要安裝 Xamarin.Android.Support.CustomTabs 這個套件到 Android 專案下,在這個時間點,我們將會安裝最新版本的 "27.0.2.1"
    Xamarin Essentials NuGet Installation
  • 如此,最初產生的錯誤訊息便會消失了。
  • 為了要使用連線這項功能,我們需要在 Android 原生專案內設定授權具有 AccessNetworkState 權限。
    關於 iOS & UWP 專案,則不需要做任何的修正
    • 在這裡,請打開 Android 原生專案的 MainActivity.cs 檔案
    • 請在 namespace 之前,加入底下程式碼,宣告具有這使用權限
C#
[assembly: UsesPermission(Android.Manifest.Permission.AccessNetworkState)]
  • 我們將開始要進行 View ViewModel Model 的設計了,首先,我們開啟 MainPage.xaml 這個檔案,底下是我們測試的頁面 XAML 語法
    在這裡,我們將會增加一個按鈕,用來取得最新的螢幕裝置的顯示資訊
xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="XFEFConnectivity.Views.MainPage"
             Title="Connectivity 連線">

    <StackLayout HorizontalOptions="Center" VerticalOptions="Center">
        <Label Text="Welcome to Xamarin Forms and Prism!" />
        <Label
            Text="{Binding ConnectivityStatus}"/>
        <Label
            Text="{Binding Profiles}"/>
    </StackLayout>

</ContentPage>
  • 請打開 MainPageViewModel.cs 這個檔案
C#
using Prism.Commands;
using Prism.Mvvm;
using Prism.Navigation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace XFEFConnectivity.ViewModels
{
    using System.ComponentModel;
    using Prism.Events;
    using Prism.Navigation;
    using Prism.Services;
    using Xamarin.Essentials;

    public class MainPageViewModel : INotifyPropertyChanged, INavigationAware
    {
        public event PropertyChangedEventHandler PropertyChanged;
        public string ConnectivityStatus { get; set; }
         public string Profiles { get; set; }
       private readonly INavigationService _navigationService;

        public MainPageViewModel(INavigationService navigationService)
        {
            _navigationService = navigationService;

            Init();
        }

        private void Init()
        {
            var current = Connectivity.NetworkAccess;

            if (current == NetworkAccess.Internet)
            {
                ConnectivityStatus = "網際網路-本機和網際網路存取";
            }
            else if (current == NetworkAccess.ConstrainedInternet)
            {
                ConnectivityStatus = "ConstrainedInternet – 受限的網際網路存取。 指出網頁驗證入口網站的連線能力,其中提供入口網站的本機存取,但存取網際網路需要透過入口網站提供了特定的憑證。";
            }
            else if (current == NetworkAccess.Local)
            {
                ConnectivityStatus = "本機– 本機網路僅限存取。";
            }
            else if (current == NetworkAccess.None)
            {
                ConnectivityStatus = "無– 沒有連線可用。";
            }
            else if (current == NetworkAccess.Unknown)
            {
                ConnectivityStatus = "未知– 無法判定網際網路連線。";
            }

            var profiles = Connectivity.Profiles;
            Profiles = "裝置中正在使用的連線類型 : ";
            if (profiles.Contains(ConnectionProfile.WiFi))
            {
                Profiles += " WiFi ";
            }
            if (profiles.Contains(ConnectionProfile.Bluetooth))
            {
                Profiles += " Bluetooth ";
            }
            if (profiles.Contains(ConnectionProfile.Cellular))
            {
                Profiles += " Cellular ";
            }
            if (profiles.Contains(ConnectionProfile.Ethernet))
            {
                Profiles += " Ethernet ";
            }
            if (profiles.Contains(ConnectionProfile.Other))
            {
                Profiles += " Other ";
            }
            if (profiles.Contains(ConnectionProfile.WiMAX))
            {
                Profiles += " WiMAX ";
            }
        }

        public void OnNavigatedFrom(NavigationParameters parameters)
        {

        }

        public void OnNavigatingTo(NavigationParameters parameters)
        {

        }

        public void OnNavigatedTo(NavigationParameters parameters)
        {

        }

    }
}
  • Android 平台執行結果
    這是使用 WiFi 的方式,且有連上 Internet 的執行結果
    Xamarin Essentials
    這是沒有網路連線的執行結果。
    Xamarin Essentials
    這是使用 4G 網路連上 Internet 的執行結果
    Xamarin Essentials
  • UWP 平台執行結果
    這是使用 WiFi 的方式,且有連上 Internet 的執行結果
    Xamarin Essentials

關於 Xamarin 在台灣的學習技術資源

Xamarin 實驗室 粉絲團
歡迎加入 Xamarin 實驗室 粉絲團,在這裡,將會經常性的貼出各種關於 Xamarin / Visual Studio / .NET 的相關消息、文章、技術開發等文件,讓您可以隨時掌握第一手的 Xamarin 方面消息。
Xamarin.Forms @ Taiwan
歡迎加入 Xamarin.Forms @ Taiwan,這是台灣的 Xamarin User Group,若您有任何關於 Xamarin / Visual Studio / .NET 上的問題,都可以在這裡來與各方高手來進行討論、交流。
Xamarin 實驗室 部落格
Xamarin 實驗室 部落格 是作者本身的部落格,這個部落格將會專注於 Xamarin 之跨平台 (Android / iOS / UWP) 方面的各類開技術探討、研究與分享的文章,最重要的是,它是全繁體中文。
Xamarin.Forms 系列課程
Xamarin.Forms 系列課程 想要快速進入到 Xamarin.Forms 的開發領域,學會各種 Xamarin.Forms 跨平台開發技術,例如:MVVM、Prism、Data Binding、各種 頁面 Page / 版面配置 Layout / 控制項 Control 的用法等等,千萬不要錯過這些 Xamarin.Forms 課程