Hatena::ブログ(Diary)

Atelier:Mitsuba

2012-02-06

その15:ApplicationDataContainerを使ってデータを保存する

Windows 8 Developer Previewなので正式版とは異なる場合があります。
また、Windows Updateが走るときもあるため、エントリ執筆現在の情報をもとにかいています。

ApplicationDataContainerは一言で言えばSLとかWPでいうIsolatedStorageです。

今回はInternal static classを使って、Page間でよべるように(というかアプリケーション内ならどこでも)しました。

2つのページにRead用とSave用のButtonとTextBlock/Boxがあって、どちらからでも書き込んだり読んだりできます。

f:id:c-mitsuba:20120206032730p:image

App.xaml.cs


using System;
using System.Threading.Tasks;
using Windows.ApplicationModel.Activation;
using Windows.UI.Xaml;

using Windows.Storage;

namespace Application20
{
    partial class App
    {
        public App()
        {
            InitializeComponent();
        }

        protected override void OnLaunched(LaunchActivatedEventArgs args)
        {
            Window.Current.Content = new MainPage();
            Window.Current.Activate();
        }
    }

    internal static class PublicData
    {
       // internal static String PublicString;
       // internal static float  PublicFloat;
        //分離ストレージを作成 ここのデータはアプリを落としても消えない。
        internal static ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
    }
}

MainPage.xaml

<UserControl x:Class="Application20.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="768" d:DesignWidth="1366">

    <Grid x:Name="LayoutRoot" Background="DarkBlue">
        <StackPanel Orientation="Vertical">
            <StackPanel Orientation="Horizontal">
                <TextBlock Width="200" x:Name="ReadTextBlock"></TextBlock>
                <Button Content="Read" Click="ReadButton_Click"></Button>
            </StackPanel>

            <StackPanel Orientation="Horizontal">
                <TextBox Width="200" x:Name="SaveTextBox"></TextBox>
                <Button Content="Save" Click="SaveButton_Click"></Button>
                </StackPanel>
            </StackPanel>
        <Frame Width="500" Source="Application20.BlankPage1"></Frame>
    </Grid>

</UserControl>

MainPage.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Windows.Foundation;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Data;



namespace Application20
{
    partial class MainPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void ReadButton_Click(object sender, RoutedEventArgs e)
        {
            ReadTextBlock.Text = (String)PublicData.localSettings.Values["Text"];
        }

        private void SaveButton_Click(object sender, RoutedEventArgs e)
        {
            PublicData.localSettings.Values["Text"] = SaveTextBox.Text;
        }
    }
}

BlankPage1.xaml

<Page x:Class="Application20.BlankPage1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignWidth="1366" d:DesignHeight="768">

    <!--Common resources for default dark theme applications-->
    <UserControl.Resources>
        <SolidColorBrush x:Key="PageBackgroundBrush" Color="#FF1A1A1A"/>
        <SolidColorBrush x:Key="PageForegroundBrush" Color="White"/>
        <SolidColorBrush x:Key="HighlightBrush" Color="#FF26A0DA"/>
    </UserControl.Resources>

    <Grid x:Name="LayoutRoot" Background="{StaticResource PageBackgroundBrush}">
        <Grid>
            <StackPanel Orientation="Vertical">
                <StackPanel Orientation="Horizontal">
                    <TextBlock Width="200" x:Name="ReadTextBlock"></TextBlock>
                    <Button Content="Read" Click="ReadButton_Click"></Button>
                </StackPanel>
                
                <StackPanel Orientation="Horizontal">
                    <TextBox Width="200" x:Name="SaveTextBox"></TextBox>
                    <Button Content="Save" Click="SaveButton_Click"></Button>
                </StackPanel>
            </StackPanel>
        </Grid>
    </Grid>
</Page>

BlankPage.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Windows.Foundation;
using Windows.Graphics.Display;
using Windows.UI.ViewManagement;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Data;

namespace Application20
{
    public sealed partial class BlankPage1
    {
        public BlankPage1()
        {
            InitializeComponent();
        }

        private void ReadButton_Click(object sender, RoutedEventArgs e)
        {
            ReadTextBlock.Text = (String)PublicData.localSettings.Values["Text"];
        }

        private void SaveButton_Click(object sender, RoutedEventArgs e)
        {
            PublicData.localSettings.Values["Text"] = SaveTextBox.Text;
        }
    }
}

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/c-mitsuba/20120206/1328466430