-->

Windows

グリッドは、コントロールを格子状に配置するコントロールだ。

空のUWPプロジェクトを作成する。
こんなMainPage.xamlが作られる。

<Page
    x:Class="TestGrid.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:TestGrid"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        
    </Grid>
</Page>

まず、行列を追加する。GridのプロパティでColumnDefinitions、RowDefinitionsで追加する。

001
001

1行目全体にボタン、1列2行〜3行にボタン、2列2行と2列3行にそれぞれボタンをドラッグ&ドロップでおく。

002

xamlのGrid部分はこんなになる。

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>
        <Button x:Name="button" Content="Button" HorizontalAlignment="Stretch" Margin="10,10,10,10.333" VerticalAlignment="Stretch" RenderTransformOrigin="0.231,0.451" Grid.ColumnSpan="2"/>
        <Button x:Name="button1" Content="Button" HorizontalAlignment="Stretch" Margin="10,9.667,10,10" Grid.Row="1" VerticalAlignment="Stretch" Grid.RowSpan="2"/>
        <Button x:Name="button2" Content="Button" Grid.Column="1" HorizontalAlignment="Stretch" Margin="10,9.667" Grid.Row="1" VerticalAlignment="Stretch"/>
        <Button x:Name="button3" Content="Button" Grid.Column="1" HorizontalAlignment="Stretch" Margin="10,10.333,10,10" Grid.Row="2" VerticalAlignment="Stretch"/>
    </Grid>


このエントリーをはてなブックマークに追加

イメージを表示する部分は、[UWP] イメージ表示と同じ。ファイルを選択するところはFileOpenPickerを使う。

        private async void button1_Click(object sender, RoutedEventArgs e)
        {
            var picker = new FileOpenPicker();
            picker.FileTypeFilter.Add(".png");
            picker.FileTypeFilter.Add(".jpg");
            var file = await picker.PickSingleFileAsync();
            if(file == null)
            {
                return;
            }
            var bitmap = new BitmapImage();
            using (var stream = await file.OpenReadAsync())
            {
                await bitmap.SetSourceAsync(stream);
            }
            image.Source = bitmap;
        }
    }


このエントリーをはてなブックマークに追加

画像ファイルをプロジェクトに追加して、画面にイメージコントロールをはっ付けて、Sourceプロパティで追加した画像ファイルを指定する。と表示できる。
まー、あえて書くほどでもないな。
それよりも、どっかから取ってきた画像データを表示してみたい。

ここでは、アプリのインストールしたところのImages/image.pngを読み込んで表示する。

        private async void button_Click(object sender, RoutedEventArgs e)
        {
            // アプリケーションのインストールフォルダからImages/image.pngを読み込む。
            var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Images/image.png"));
            var bitmap = new BitmapImage();
            using (var stream = await file.OpenReadAsync())
            {
                await bitmap.SetSourceAsync(stream);
            }
            image.Source = bitmap;
        }


このエントリーをはてなブックマークに追加

ローカルフォルダでファイルの読み書きを一応やってみる。

        // ローカルフォルダにファイルを作る。
        private async void button2_Click(object sender, RoutedEventArgs e)
        {
            ApplicationData appData = ApplicationData.Current;

            // ローカルフォルダにファイルを作る。
            StorageFile file = await appData.LocalFolder.CreateFileAsync("hoge.txt");
            try
            {
                // オープンして書き込む
                using (Stream stream = await file.OpenStreamForWriteAsync())
                {
                    using (StreamWriter sw = new StreamWriter(stream))
                    {
                        await sw.WriteLineAsync("hoge1");
                        await sw.WriteLineAsync("hoge2");
                        await sw.WriteLineAsync("hoge3");
                        await sw.WriteLineAsync("hoge4");
                    }
                }
            }
            catch (IOException ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }

        // ローカルフォルダのファイルを読み込んでみる。
        private async void button3_Click(object sender, RoutedEventArgs e)
        {
            ApplicationData appData = ApplicationData.Current;

            try
            {
                // ローカルフォルダのファイルをオープン
                using (Stream stream = await appData.LocalFolder.OpenStreamForReadAsync("hoge.txt"))
                {
                    using (StreamReader sr = new StreamReader(stream))
                    {
                        String s;
                        while ((s = await sr.ReadLineAsync()) != null)
                        {
                            Debug.WriteLine(s);
                        }
                    }
                }
            }
            catch (IOException ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }


このエントリーをはてなブックマークに追加

まず、アプリケーションをインストールしたフォルダを取得する。

        private async void button_Click(object sender, RoutedEventArgs e)
        {
            // アプリケーションのインストールフォルダを取得
            StorageFolder storage = Windows.ApplicationModel.Package.Current.InstalledLocation;

            Debug.WriteLine(storage.Path);

            // ファイル一覧を表示
            var list = await storage.GetItemsAsync();
            foreach(var item in list)
            {
                Debug.WriteLine(item.Name);
            }
        }

アプリケーションのデータフォルダを取得する。ApplicationData.Currentのプロパティで取得できる。

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            ApplicationData appData = ApplicationData.Current;

            // ローカルフォルダ
            Debug.WriteLine(appData.LocalFolder.Path);
            // ローミングフォルダ、同じアプリをインストールした他のデバイスに同期される。
            Debug.WriteLine(appData.RoamingFolder.Path);
            // テンポラリフォルダ
            Debug.WriteLine(appData.TemporaryFolder.Path);
        }

ローミングフォルダはサイズが決まっていてRomingStorageQuotaプロパティでわかる。ちょっと見てみたら100KBってなっていた。ほんとにちょっとしたデータしか同期できないな。



このエントリーをはてなブックマークに追加

↑このページのトップヘ