locked
Pivotページ内の画面遷移を動的に行いたい RRS feed

  • 質問

  • SilverlightでWindowsPhoneのアプリケーション開発を行っております。まだ開発初心者ですので、分からないことが多く、質問の内容も初歩的なもので申し訳ございません。

    曜日ごとに分かれたPivotページ(月曜日→火曜日→水曜日・・・といった感じのページ)を使用しておりますが、アプリを起動した際にその日の曜日のページを初期画面に変更する方法が分かりません。例えば、今日が水曜日なら、アプリを起動した時の初期ページはPivotの水曜日のページを開き、金曜日なら金曜日のページを開く・・・といった感じにしたいと思っております。

    条件(今回の場合は当日の曜日)でPivotページを切り替える方法を教えていただけないでしょうか。

    よろしくお願いいたします。

    2012年10月2日 2:26

回答

  • >> ただ、本日は火曜日なのですが、実行してみると水曜日のページが表示されました。
    >> Pivotページには月曜日~金曜日までの平日のみを用意しているので、土曜日と日曜日は存在しておりません。
    >> それが原因でしょうか?

    あー・・・SelectedIndexの部分は(私が)横着しましたからねぇ(苦笑)
    ページが5ページしか存在しないのであれば、各ページのIndexは0~4になりますね。

    >> Weekdayはint型に変換すると1~7(日曜日~土曜日)になると思っていたのですが(・・・これは間違いでしょうか?)

    間違いです。DayOfWeek列挙型は0スタートなので0~6になります。
    最初に提示したコードは、日~土だと各ページのIndexとDayOfWeekのint変換がちょうど合うのでああいう実装になってます。
    まぁいつもの癖なんですけどね・・・

    で、修正なんですが、横着せずにちゃんとswitch文を書けばよろしいでしょう。

            private void Pivot_Loaded(object sender, RoutedEventArgs e)
            {
                Pivot pivot = (Pivot)sender;
                switch (DateTime.Now.DayOfWeek)
                { 
                    case DayOfWeek.Sunday:
                        pivot.SelectedIndex = 0;
                        break;
    
                    case DayOfWeek.Monday:
                        pivot.SelectedIndex = 1;
                        break;
    
                    case DayOfWeek.Tuesday:
                        pivot.SelectedIndex = 2;
                        break;
    
                    case DayOfWeek.Wednesday:
                        pivot.SelectedIndex = 3;
                        break;
    
                    case DayOfWeek.Thursday:
                        pivot.SelectedIndex = 4;
                        break;
    
                    case DayOfWeek.Friday:
                        pivot.SelectedIndex = 5;
                        break;
    
                    case DayOfWeek.Saturday:
                        pivot.SelectedIndex = 6;
                        break;
                }
            }

    ※各ページのIndexとDayOfWeekの値のマッチングはご自分の環境に合わせて修正してくださいね。

    2012年10月2日 8:03

すべての返信

  • PivotコントロールはItemsControl派生なので、SelectedIndexかSelectedItemをLoad時に変更してやればOKです。
    こんな感じで。

    <phone:PhoneApplicationPage 
        x:Class="PivotApp1.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
        xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
        xmlns:controls="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
        mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768" 
        d:DataContext="{d:DesignData SampleData/MainViewModelSampleData.xaml}"
        FontFamily="{StaticResource PhoneFontFamilyNormal}"
        FontSize="{StaticResource PhoneFontSizeNormal}"
        Foreground="{StaticResource PhoneForegroundBrush}"
        SupportedOrientations="Portrait"  Orientation="Portrait"
        shell:SystemTray.IsVisible="True">
    
        <Grid x:Name="LayoutRoot" Background="Transparent">
            <controls:Pivot Title="サンプル" Loaded="Pivot_Loaded" >
                <controls:PivotItem Header="日曜"/>
                <controls:PivotItem Header="月曜"/>
                <controls:PivotItem Header="火曜"/>
                <controls:PivotItem Header="水曜"/>
                <controls:PivotItem Header="木曜"/>
                <controls:PivotItem Header="金曜"/>
                <controls:PivotItem Header="土曜"/>
            </controls:Pivot>
        </Grid>
     
    </phone:PhoneApplicationPage>

        public partial class MainPage : PhoneApplicationPage
        {
            public MainPage()
            {
                InitializeComponent();
            }
    
            private void Pivot_Loaded(object sender, RoutedEventArgs e)
            {
                Pivot pivot = (Pivot)sender;
                pivot.SelectedIndex = (int)DateTime.Now.DayOfWeek;
            }
        }

    2012年10月2日 4:12
  • みっと様

    早速のご回答ありがとうございます。教えて頂いた通りに実行してみるとPivotページが切り替わりました。ありがとうございます。

    ただ、本日は火曜日なのですが、実行してみると水曜日のページが表示されました。Pivotページには月曜日~金曜日までの平日のみを用意しているので、土曜日と日曜日は存在しておりません。それが原因でしょうか?Weekdayはint型に変換すると1~7(日曜日~土曜日)になると思っていたのですが(・・・これは間違いでしょうか?)、int型に変換されたDayOfWeekを出力してみると["2"]と表示されました。現状だと["2"=水曜日]ということになるので、数値に-1をすれば曜日は合うのですが、なんだか違和感があります。

    サンプルコードまでご用意いただいたのに自分で解決できず、本当に申し訳ございません。

    2012年10月2日 7:27
  • >> ただ、本日は火曜日なのですが、実行してみると水曜日のページが表示されました。
    >> Pivotページには月曜日~金曜日までの平日のみを用意しているので、土曜日と日曜日は存在しておりません。
    >> それが原因でしょうか?

    あー・・・SelectedIndexの部分は(私が)横着しましたからねぇ(苦笑)
    ページが5ページしか存在しないのであれば、各ページのIndexは0~4になりますね。

    >> Weekdayはint型に変換すると1~7(日曜日~土曜日)になると思っていたのですが(・・・これは間違いでしょうか?)

    間違いです。DayOfWeek列挙型は0スタートなので0~6になります。
    最初に提示したコードは、日~土だと各ページのIndexとDayOfWeekのint変換がちょうど合うのでああいう実装になってます。
    まぁいつもの癖なんですけどね・・・

    で、修正なんですが、横着せずにちゃんとswitch文を書けばよろしいでしょう。

            private void Pivot_Loaded(object sender, RoutedEventArgs e)
            {
                Pivot pivot = (Pivot)sender;
                switch (DateTime.Now.DayOfWeek)
                { 
                    case DayOfWeek.Sunday:
                        pivot.SelectedIndex = 0;
                        break;
    
                    case DayOfWeek.Monday:
                        pivot.SelectedIndex = 1;
                        break;
    
                    case DayOfWeek.Tuesday:
                        pivot.SelectedIndex = 2;
                        break;
    
                    case DayOfWeek.Wednesday:
                        pivot.SelectedIndex = 3;
                        break;
    
                    case DayOfWeek.Thursday:
                        pivot.SelectedIndex = 4;
                        break;
    
                    case DayOfWeek.Friday:
                        pivot.SelectedIndex = 5;
                        break;
    
                    case DayOfWeek.Saturday:
                        pivot.SelectedIndex = 6;
                        break;
                }
            }

    ※各ページのIndexとDayOfWeekの値のマッチングはご自分の環境に合わせて修正してくださいね。

    2012年10月2日 8:03
  • みっと様

    ありがとうございます!switch文を書いて設定しているPivotページの環境にindexの値などを合わせると正常に表示されました!

    私のような初心者にも分かるように解説していただき、本当にありがとうございました!もっと勉強して自力で開発できる知識と技術を身につけたいのですが、まだまだ初心者から抜け出せない状態ですので、これからもフォーラム上で質問することが多いと思います。また機会がありましたらよろしくお願いいたします。

    2012年10月2日 8:39