SQLの窓

2013年05月10日


Win8 ストア : ファイルアクセス テンプレート

SkyDrive へ移動

ダウンロードしたテンプレートは、『C:\Users\ユーザー名\Documents\Visual Studio 2012\Templates\ProjectTemplates\Visual C#\Windows Store』に保存します。

Windows Store フォルダは最初は存在しないので作成します( 好きな名前のフォルダでも Visual Studio から利用できます )
ソースコード表示 Win8 ストア : ストアブランク テンプレートを元にファイルアクセス部分を実装しています 仕様 ❶ Page.Resources で XAML 内で利用する文字列を定義 ❷ テキストエリアを設置( ファイルの処理の為、Package.appxmanifest にファイル利用設定 ) ❸ AppBar を XAML で定義 (ボタンを左側3つ、右側2つ定義) ❹ それぞれのボタンにイベントを定義。但し、左側のファイル用ボタンは動的に作成 ❺ 保存ボタンのイベントで、MessageDialog の利用サンプルを実装 ❻ MessageDialog のイベントを別のソースコードに定義( partial ) ❼ TextResource.cs に、StaticResource 用のクラスを定義 ❽ MessageDialog 処理用の MsgBox クラス テキストエリア テキストエリアは、実際には TextBox で、AcceptsReturn="True" にする事によって複数行の入力が可能になります また、ファイルのアクセスを想定して、Package.appxmanifest に『機能』と『宣言』の設定をしています ( ページのロードでは、『text.txt』というファイルの存在チェックのみ行っています ) ファイル作成ボタンと保存ボタンの初期状態 一番最初の状態ではファイルは作成されていないので左側の3つ目のボタンは『ファイル作成』となっています。 また、右側の『保存』ボタンは、使用不可となっています。 ファイル作成とファイルの削除 bExist は、MainPage で定義した private 変数で、Page の Loaded イベントで設定しています。それによって、追加するボタンを差し換えて、それぞれの状態に対してイベントを定義していますが、この処理の切り替えは Page そのもののリロードによって行われます。
// ******************************************************
// ファイルが存在するので、削除ボタンを作成して処理を登録する
// ******************************************************
if (bExist)
{
	// インスタンス作成
	var btn = new Button();
	// スタイル
	btn.Style = (Style)App.Current.Resources["DeleteAppBarButtonStyle"];
	// テキスト表示
	AutomationProperties.SetName(btn, "削除");
	// 非同期ラムダ式
	btn.Click += async (_sender, _e) =>
	{
		MsgBox.ShowAsync(this, "OK", "ファイルを削除します");
		try
		{
			StorageFile strageFile = await storageFolder.GetFileAsync("text.txt");
			// ファイル削除
			await strageFile.DeleteAsync();
			// メニュー削除
			LeftBar.Children.RemoveAt(2);

		}
		catch (Exception ex)
		{
			Debug.WriteLine(ex.Message);
		}

		// Navigate の引数作成
		App.MyParam NavigateArgs = new App.MyParam() { title = "リロード", type = 1 };
		// ページを再表示
		(App.Current as App).rootFrame.Navigate(typeof(MainPage), NavigateArgs);

	};
	LeftBar.Children.Add(btn);

	SaveButton.IsEnabled = true;
}
// ******************************************************
// ファイルが存在しない。
// 1) 作成ボタンを作成して処理を登録する
// 2) 保存ボタンを選択できないようにする
// ******************************************************
else
{
	// インスタンス作成
	var btn = new Button();
	// スタイル
	btn.Style = (Style)App.Current.Resources["AddAppBarButtonStyle"];
	// テキスト表示
	AutomationProperties.SetName(btn, "ファイル作成");
	// 非同期ラムダ式
	btn.Click += async (_sender, _e) =>
	{
		MsgBox.ShowAsync(this, "OK", "ファイルを作成します");
		try
		{
			await storageFolder.CreateFileAsync("text.txt");
			// メニュー削除
			LeftBar.Children.RemoveAt(2);

		}
		catch (Exception ex)
		{
			Debug.WriteLine(ex.Message);
		}

		// Navigate の引数作成
		App.MyParam NavigateArgs = new App.MyParam() { title = "リロード", type = 2 };
		// ページを再表示
		(App.Current as App).rootFrame.Navigate(typeof(MainPage), NavigateArgs);

	};
	LeftBar.Children.Add(btn);

	SaveButton.IsEnabled = false;

}

ページのリロード

App.xaml.cs で、最初のページのロードが行われる際、以下のコードで表示する場所の骨格が作成されています。

public Frame rootFrame = Window.Current.Content as Frame;

rootFrame は、Window( 現在のアプリケーションウインドウ )Current(現在アクティブなウィンドウ)の UI である Content を Frame(フレーム)として取得しています。これは、仕様だと思われるので詳細な説明は Microsoft のドキュメントからは読み取りませんが、ブラウザと同様であると考えると良いと思います。

実際は、この rootFrame に、new Frame() でインスタンスを作成した上で利用されます。

つまり、アプリケーションの表示部分であるフレームに、実体であるページを XML ベースでロードするという手順になります。しかし、最初のロードで ページのインスタンスを作成する為に、Navigate メソッドが使用されています。

これは、この考え方でリロードすると、Navigate メソッドを実行する毎にページが新たに作成される事を意味します。

実際には、GoBack メソッドでも新たにインスタンスが作成されるようなので、画面の状態を保持して画面を切り替えるには、rootFrame.Content に保存しておいたページのインスタンスを戻すという処理が必要になります。( ここでは新しいインスタンスが都合が良いのでその方法は使っていません )

ファイルシステムへのアクセス

Windows の Shell のような感じで、フォルダオブジェクトを取得してそこからファイルオブジェクトを作成して、作成・削除・複製等の基本的な処理を行います。

ファイルの中身の更新は、FileIO という static なクラスの static なメソッドを使って、その引数としてファイルオブジェクトを使用します。

await FileIO.WriteTextAsync(strageFile, this.TextData.Text);

テキスト用のメソッドは、UTF-8N 前提の処理です。他のキャラクタセットとしてアクセスするには、バイナリデータとしてアクセスする必要があります。

Microsoft のサンプル

関連する情報

XAML コードを横に長く表示させずに、属性毎に縦に表示させる設定



タグ:Windows8
【Win8 ストアアプリの最新記事】
posted by lightbox at 2013-05-10 18:59 | Win8 ストアアプリ | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり