・ このブログの記事(テキスト・画像)について

2012年2月11日土曜日

WindowsPhone開発 画面遷移


Windows Phoneで画面遷移の方法のメモです。

1.環境
Windows7(体験版)
VisualStdio2010Expres for WindowsPhone
DirectX10に対応したPC

2.ソースコード
Mainページのソース
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;

namespace SampleCodeList
{
    public partial class MainPage : PhoneApplicationPage
    {
        // コンストラクター
        public MainPage()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            NavigationService.Navigate(new Uri("/PhonePage1.xaml?Name="+"MainPage!!", UriKind.Relative));
        }
    }
}
Page1のソース
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;

{
    public partial class PhonePage1 : PhoneApplicationPage
    {
        public PhonePage1()
        {
            InitializeComponent();
        }
        bool isBackFlag = false;
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            //この時画面遷移をするが、このPhonePage1インスタンスは残っている
            NavigationService.Navigate(new Uri("/PhonePage2.xaml", UriKind.Relative));
        }
        //画面遷移毎に呼ばれる。
        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            
            //クエリキー取得
            IDictionary param = NavigationContext.QueryString;
            if (param.ContainsKey("Name"))
            {
                this.textEmpty.Text = "こんにちは" + param["Name"] + "さん";
            }
            
           // base.OnNavigatedTo(e);

            if (isBackFlag) NavigationService.GoBack();
            base.OnNavigatedTo(e);
            isBackFlag = true;
        }
    }
}
Page2ページのソース
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;

namespace SampleCodeList
{
    public partial class PhonePage2 : PhoneApplicationPage
    {
        public PhonePage2()
        {
            InitializeComponent();
        }
    }
}
3.キャプチャーとソース内容
このサンプルアプリは、下記3点が含まれたサンプルです。
・画面遷移の方法
・ページをMainPage->Page1->Page2と進んだ後、BackKey押下で
MainPageへ行く方法(一度ホーム画面へ行くと無効になってしまうw)
・ページ間で文字列を渡す方法。
Ming画面
 
Page1画面
Page2画面

Main画面から「backgroud」ボタンを押下
内部で文字列を仕込んでPage1へ遷移するため
 NavigationService.Navigate(new Uri("/PhonePage1.xaml?Name="+"MainPage!!", UriKind.Relative));

と記述しPage1へ遷移
MainPage で仕込んだMinPage!!という文字列をPage1へ受け取ってTextBlockへ表示。
Page1からPage2へ遷移
通常、ここでBackKeyを押下するとPage1ですが、今回はMainページへ遷移するように変更しました。


というか・・・・・WindowsPhone開発って結構ハードル高い
たとえば・・
Marketplaceに並べるアプリを開発する場合は、
Windows Phone 7 Application Certification Requirementsの
「5.2.4 Use of Back Button」に引っかかるため、
BackKeyは必ず有効にしておかなきゃいけない・・・・・
BackKey無効な仕組みをAPIとして提供しているのに・・・それを規約レベルでできないようにしているなんて・・・・・

開発者なかせ?w



今日はこんなところです。
以上です。

0 件のコメント:

コメントを投稿