くうと徒然なるままに

モバイルアプリを作りながらバックエンドも作っています。

Windows 10 Mobile の画面をPCに出力する

自己紹介

初めまして、大学一年生のくぅと言います。 C# と Xamarin が好きです。 まだまだ未熟ですが、色々吸収していきます。

やっていくこと

Windows 10 Mobile の画面をPCに出力し、操作できるようにする

やっていくこと

1. 必要なソフトをダウンロード・インストールする

MSのダウンロードサイト よりダウンロードします。(英語版しかないっぽい? f:id:kuxumarin:20170101182100p:plain f:id:kuxumarin:20170101181732p:plain

2. Windows 10 Mobile と PC をUSBで繋ぐ

接続したときに以下のように画面をPCに出力していいか聞かれるので、OKを押します。

インストールしたソフトを起動すると表示されます。

f:id:kuxumarin:20170101181742p:plain f:id:kuxumarin:20170101181748p:plain

また、以下のようにPCから Windows 10 Mobile を操作することもできます。

f:id:kuxumarin:20170101181755g:plain

まとめ

画面の操作までできるとは思わなかった

かずきのXamarin.Forms入門

かずきのXamarin.Forms入門

.NET開発テクノロジ入門2016年版Visual Studio 2015対応版

.NET開発テクノロジ入門2016年版Visual Studio 2015対応版

UWPアプリで効果音を再生してみた

自己紹介

初めまして、大学一年生のくぅと言います。 C# と Xamarin が好きです。 まだまだ未熟ですが、色々吸収していきます。

やっていくこと

UWPアプリで効果音を再生する

説明

UWPアプリで効果音を再生するには、MediaElement Class を使います。

コード

Xaml

<MediaElement Source="Assets/SE.mp3" x:Name="SE" AutoPlay="False"></MediaElement>

CsharpCode

SE.Play();

まとめ

以外に簡単にすることができた。自動再生や、リピートさせたりと様々なオプションがあるので、面白そう

C# のコードだけで鳴らすことはできないのかな?

UWPアプリのListView でタップされたアイテムを取得する

自己紹介

初めまして、大学一年生のくぅと言います。 C# と Xamarin が好きです。 まだまだ未熟ですが、色々吸収していきます。

やっていくこと

UWPアプリのListView でクリックしたアイテムを取得する

解説

Tapped のイベントの引数のTappedRoutedEventArgs をListView に紐づけている型にキャストすればおkです。

コード

 private void ListView_Tapped(object sender, TappedRoutedEventArgs e)
        {
            // タップしたアイテムのアイテムを取得
            // ここでは、文字列をリストビューに表示していたので、String でキャスト
            var tappedString = ListView.SelectedItem as string;
        }

Azure Mobile Apps をUWPアプリで使ってみた(コードを一から書いてみた編)

自己紹介

初めまして、大学一年生のくぅと言います。 C# と Xamarin を好きです。 まだまだ未熟ですが、色々吸収していきます。

やっていくこと

前回は、Azure Mobile Apps をクイックスタートで利用できるサンプルを動かしてみました! 今回は、TODOアプリを実装しながら、中身を見ていきましょう!

Mobile Apps については Mobile Apps について調べたからまとめてみた をご覧ください

それでは作業を開始していきます。

UWP アプリを作成する

UWP アプリを作成中

UWP アプリの作成画面

Mibile Apps 側の準備

Azure のポータルにアクセス

Azure の Portal の画像

Azure Mobile Apps を作成

今回は、前回作成した Azure Mobile Apps をそのまま利用します。 詳細は、以下を参照

[http://kuxumarin.hatenablog.com/entry/2016/12/23/Azure_Mobile_Apps_%E3%81%AE%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%81%AEUWP_%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E3%82%B5%E3%83%Bf:id:kuxumarin:20161226153617g:plain3%E3%83%97%E3%83%AB%E3%82%92:embed:cite]

1. Conenct Client App をクリック

f:id:kuxumarin:20161226153048p:plain

2. Azure Mobile Apps のサンプルコードを出す

今回は、UWP で使っていくので、Windows(C#) を選択します。 また、そのままでは、サンプルをダウンロードするボタンしか表示されないので、CONNECT AN EXSITING APP を選択し、サンプルコードが表示されるようにします。

f:id:kuxumarin:20161226153126p:plain

コードディング

Azure に接続するためのクラスを作成

  1. Nuget から Azure Mobile Apps 用のパッケージを追加

  2. Model フォルダを追加

  3. Model フォルダの中にAzureMobileApps.cs を追加

Azureとつなぐクラス

以下のコードを作成しました。

using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.WindowsAzure.MobileServices;

namespace MobileApps_Test.Model
{
    public class AzureMobileApps
    {
        // Mobile Apps のクライアントを作成
        private static MobileServiceClient MobileApps => new MobileServiceClient("https://kuxu-quickstart-test-12-23.azurewebsites.net");

        // TOODのリストを読みこむ
        // Whereメソッドを使用することでデータに対してフィルターすることができる
        public Task<List<TodoItem>> GetTodoASync() => MobileApps.GetTable<TodoItem>().Where(item => item.Complete == false).ToListAsync();

        // TODOを追加する
        public async Task AddTodoAsync(TodoItem todo) => await MobileApps.GetTable<TodoItem>().InsertAsync(todo);

        // TODOを削除する
        // 削除する行は、DeleteAsync で渡されるインスタンスの”ID” に格納されている文字列で判断する
        public async Task DeleteASync(string key)
            => await MobileApps.GetTable<TodoItem>().DeleteAsync(new TodoItem() {Id = key});
    }
}

  1. Model フォルダの中にTODO を保存するためのデータ構造を定義

クイックスタートで作成すると、Easy Table*1 に最初からテーブルが作られているので、それを利用します。 そのためのデータで意義として、 以下のようなコードを作成しました。

データ構造

namespace MobileApps_Test.Model
{
    public class TodoItem
    {
        public string Id { get; set; }
        public string Text { get; set; }
        public bool Complete { get; set; }
    }
}
  1. UIとUIに関するコード

StackLayout でテキストブロック、ボタン、リストビューを並べました。

UI定義

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <TextBox x:Name="TodoTitle" Text="" PlaceholderText="TODOTitle"></TextBox>
        <Button x:Name="AddTodoButton" Content="AddTODO" Click="AddTODOButton_Click"></Button>
        <ListView x:Name="TODOListView" Tapped="TODOListView_Tapped"  >
            <ListView.Header>TODO</ListView.Header>
        </ListView>
    </StackPanel>

UIに関するコード

using System;
using System.Collections.Generic;
using System.Linq;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Navigation;
using MobileApps_Test.Model;

// 空白ページのアイテム テンプレートについては、http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 を参照してください

namespace MobileApps_Test
{
    /// <summary>
    /// それ自体で使用できる空白ページまたはフレーム内に移動できる空白ページ。
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public AzureMobileApps MobileApps { get; set; } = new AzureMobileApps();

        public IEnumerable<TodoItem> TodoItems { get; set; }

        public MainPage()
        {
            InitializeComponent();
            
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            // このページに来たら、リストビューにTODOをセットする
            RefreshTodoListView();
        }

        // TODOをAzureから取得して、リストビューのアイテムソースにセットする
        private async void RefreshTodoListView()
        {
            TODOListView.ItemsSource = (await MobileApps.GetTodoASync()).Select(item => item.Text);
        }

        private async void AddTODOButton_Click(object sender, RoutedEventArgs e)
        {
            await MobileApps.AddTodoAsync(new TodoItem()
            {
                Complete = false,
                Id = Guid.NewGuid().ToString(),
                Text = TodoTitle.Text 
            });

            // TODO を追加したらテキストボックスを空にする
            TodoTitle.Text = "";
            RefreshTodoListView();
        }

        // リストビューをタップしたら、タップしたアイテムを削除する
        private async void TODOListView_Tapped(object sender, TappedRoutedEventArgs e)
        {
            // タップしたアイテムのテキストを取得
            var tappedString = TODOListView.SelectedItem as string;
            // タップしたアイテムのテキストからTODOを特定する
            var teppedItem = (await MobileApps.GetTodoASync()).First(item => item.Text == tappedString);
            // TODOを消す
            await MobileApps.DeleteASync(teppedItem.Id);
            RefreshTodoListView();
        }
    }
}

動かしてみた

f:id:kuxumarin:20161226154834g:plain

感想

SDK(?)が非常によく作られていていい感じでした。 UWPアプリはC#が使えるので、LinQ を使って取り出したデータを調理できるので、楽でした。

*1:データベースを手軽に使えるようにしてくれるMobile Apps の機能、今回はSQLite を使っています

Azure Mobile Apps のクイックスタートのUWP アプリのサンプルを動かしてみた

自己紹介

初めまして、大学一年生のくぅと言います。 C# と Xamarin が好きです。 まだまだ未熟ですが、色々吸収していきます。

やっていくこと

Azure Mobile Apps のクイックスタートを使い、UWP アプリのサンプルを動かしてみる

Azure Mobile Apps の説明については、こちらに書いてあります。

kuxumarin.hatenablog.com

手順

1. Azure Mobile Apps を作成する

左上の新規ボタンをクリックします。

f:id:kuxumarin:20161223231727p:plain f:id:kuxumarin:20161223231805p:plain

検索ボックスに "quick start" と入力し、検索する

f:id:kuxumarin:20161223231756p:plain

2. Azure Mobile Apps の初期設定をする

f:id:kuxumarin:20161223231840p:plain

必要な設定をする

  • アプリ名

自由に決めてください

各自の利用しているサブスクリプション 学生の場合は、Imagine for Azure 社会人の場合は、 MSDN Subscription 等(これ以外にもいろいろあります)

  • リソースグループ

リソースグループにまとめることで、一括して、削除したり、Azureで使っているサービスをまとめることができます。

  • App Service プラン/場所

ここで重要なポイントがあります! デフォルトの場合は、有料のプランになっていることがあります ですので、無料で試してみたい方は、設定を変更してください

App Service プランを変更する

App Service プランをクリックし、既存のプランがない場合は新規作成をクリックして新規作成してください f:id:kuxumarin:20161223231955p:plain

無事に作成されましたか?

サンプルをダウンロードする

f:id:kuxumarin:20161223231920p:plain f:id:kuxumarin:20161223231929p:plain

Azure Mobile Apps にはいろいろな種類 *1 のプラットフォームに対応したサンプルが存在しています。 Connect Client Apps のボタンをクリック、さらに、Windows(C#) *2 を開いてください。

注意点

このサンプルは、 Windows 10 SDK 10240 を必要とします。インストールしていない方は、インストールしてください・

実行

f:id:kuxumarin:20161223231945p:plain

https://lh3.googleusercontent.com/-PkNsd6-cpFM/WF36XjOjCHI/AAAAAAAAF5I/XTFPgFbn0k0/s0/2016-12-24_13-32-22.gif

ビルドして、実行すれば動きます。

感想

Azure Mobile Apps でクイックスタートを利用すれば、Azure 初心者でも手軽に開始することができた。 サンプルもダウンロードできるので、安心でした。

Azureテクノロジ入門2016 (マイクロソフト関連書)

Azureテクノロジ入門2016 (マイクロソフト関連書)

Microsoft Azureへの招待 (NextPublishing)

Microsoft Azureへの招待 (NextPublishing)

*1:iOS(ネイティブ), Android(ネイティブ), Windows, Xamarin.iOS and Xamarin.Android, Xamarin.Forms, Cordova のサンプルが用意されています。

*2:UWP 用のサンプルです

Windows 10 でユーザーの設定しているアクセントカラーを取得するには?

Windows 10 ではOS のアクセントカラーを選択することが出来ます。

askpc.panasonic.co.jp

// 説明

UWP アプリから、アクセントカラーを取得してみます。

UISettings.GetColorValue 

の関数を使い、取得できます。

// サンプルコード

var color = new UISettings().GetColorValue(UIColorType.Accent);

// 使ってみた

Xaml

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Rectangle x:Name="Light3" Height="100" ToolTipService.ToolTip="Light3" ></Rectangle>
        <Rectangle x:Name="Light2" Height="100" ToolTipService.ToolTip="Light2"></Rectangle>
        <Rectangle x:Name="Light1" Height="100" ToolTipService.ToolTip="Light1"></Rectangle>
        <Rectangle x:Name="AccentColor" Height="100" ToolTipService.ToolTip="AccentColor"></Rectangle>
        <Rectangle x:Name="Dark1" Height="100" ToolTipService.ToolTip="Dark1"></Rectangle>
        <Rectangle x:Name="Dark2" Height="100" ToolTipService.ToolTip="Dark2"></Rectangle>
        <Rectangle x:Name="Dark3" Height="100" ToolTipService.ToolTip="Dark3"></Rectangle>
    </StackPanel>

CSharp

 Light3.Fill = new SolidColorBrush(new UISettings().GetColorValue(UIColorType.AccentLight3));
            Light2.Fill = new SolidColorBrush(new UISettings().GetColorValue(UIColorType.AccentLight2));
            Light1.Fill = new SolidColorBrush(new UISettings().GetColorValue(UIColorType.AccentLight1));
            AccentColor.Fill = new SolidColorBrush(new UISettings().GetColorValue(UIColorType.Accent));
            Dark1.Fill = new SolidColorBrush(new UISettings().GetColorValue(UIColorType.AccentDark1));
            Dark2.Fill = new SolidColorBrush(new UISettings().GetColorValue(UIColorType.AccentDark2));
            Dark3.Fill = new SolidColorBrush(new UISettings().GetColorValue(UIColorType.AccentDark3));

// 実際に動かしたスクショ

f:id:kuxumarin:20161030012948p:plain f:id:kuxumarin:20161030012952p:plain

// ソースコード

github.com

TextBlock の文字を色を変えるには?

UWP アプリの TextBlock の文字を色を変えるには、TextBlock の Foreground に色情報を代入することでできます。

// コード例

var label = new TextBlock();
// テキストの色を白色に変える
label.Foreground = new SolidColorBrush(Colors.White);
// テキストの色を黒色に変える
label.Foreground = new SolidColorBrush(Colors.Black);

UWP でアプリの設定を勝手に各デバイス間で同期するプログラミング方法

ApplicationData Class を使えば設定とかデータを保存できるらしい ここらへんを参照すればおk

ApplicationData Class (Windows)

このクラスの中の cs RoamingSettings プロパティをごにょれば行けるらしい

サンプルコード

gist82ad5172cbf84c65fb2db9794783d679

gista3d9d200d06c5d40708a4bac92c99744

gist26222fafa55af784c8257ff2be4f736c

設定を読み込むところで問題が発生します。設定が一つも保存されていないときに設定を読み込もうとしてもダメなため、 少し工夫が必要です

こんな感じ

gisteb57c6f8015e0c69cd59b90f4c8d9f37

標準の機能でここまでやってくれるのありがたい

Prism を使用した UWP アプリで ハンバーガーパターンで画面遷移を行う方法

環境

View では、 SpilitView の Content に Frame を入れていい感じに名前を付けておきます。
Pane の中には List View でメニューを実装したりすると良い

View Model でもいい感じにメソッドを実装

// ここら辺を参照

www.atmarkit.co.jp

www.atmarkit.co.jp

実装したMainPage.xaml.cs のコード

Prism 使ってるから FrameNavigationService の第二引数がめんどくさい

以上