Windows Phone 8開發知識筆記

暖楓無敵發表於2014-03-10

1、Windows Phone 8目前支援3種螢幕解析度,分別是

WVGA  800X480 (15:9)

WXGA  1280X768 (15:9)

720p    1280X720 (16:9)


2、在Windows Phone 8中,當BackgroundAudioPlayer的狀態更改時,可以從PlayStateChangedEventArgs中捕獲有關狀態改變的資訊。


3、要使頁面支援旋轉,要把PhoneApplicationPage的SupportedOrientations屬性改為PortraitOrLandscape,然後可以通過定義OrientationChanged事件來處理佈局

<phone:PhoneApplicationPage

...

SupportedOrientations="PortraitOrLandscape"   

Orientation="Portrait"  

OrientationChanged="PhoneApplicationPage_OrientationChanged">


private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e)
        {
            MessageBox.Show("螢幕發生旋轉,當前是:" + e.Orientation);
            // 如果是橫向的  
            if (e.Orientation == PageOrientation.Landscape ||
                e.Orientation == PageOrientation.LandscapeLeft ||
                e.Orientation == PageOrientation.LandscapeRight)
            {
                Grid.SetColumn(this.img, 0);
                Grid.SetRow(this.img, 0);
                Grid.SetRow(this.txtBlock, 0);
                Grid.SetColumn(this.txtBlock, 1);
            }
            // 如果是縱向  
            else if (e.Orientation == PageOrientation.Portrait ||
                e.Orientation == PageOrientation.PortraitDown ||
                e.Orientation == PageOrientation.PortraitUp)
            {
                Grid.SetColumn(this.img, 0);
                Grid.SetRow(this.img, 0);
                Grid.SetRow(this.txtBlock, 1);
                Grid.SetColumn(this.txtBlock, 0);
            }
            else
            {
                Grid.SetColumn(this.img, 0);
                Grid.SetRow(this.img, 0);
                Grid.SetRow(this.txtBlock, 1);
                Grid.SetColumn(this.txtBlock, 0);
            }
        } 


狀態有PortraitUp、LandscapeLeft、LandscapeRight


4、文字顯示控制元件TextBlock,裡面文字顯示不同顏色,通過<Run  Foreground="Red">Windows Phone 8</Run>標籤實現,文字中間換行,使用<LineBreak/>  標記,如下:

 <TextBlock x:Name="txtBlock" 
                FontSize="70"  
                Margin="28">  
                <Run Foreground="Coral">Hello Kitty!</Run>  
                <LineBreak/>  
                <Run Foreground="Yellow">Windows Phone 8</Run>  
                <LineBreak/>  
                <Run Foreground="SkyBlue">WebGIS</Run>
</TextBlock>


5、頁導航

 <HyperlinkButton Content="跳到頁面二" Height="78" HorizontalAlignment="Left" Margin="126,86,0,0" Name="hyperlinkButton1" VerticalAlignment="Top" Width="216" FontSize="32" FontStyle="Normal" FontStretch="Normal"  
                      NavigateUri="/pageSecond.xaml"/> 

private void button1_Click(object sender, RoutedEventArgs e)
{
            this.NavigationService.Navigate(new Uri("/pageSecond.xaml", UriKind.Relative));
}


6、OnNavigatedFrom 方法和OnNavigatedTo 方法。

      1)、當使用者即將離開當前頁時,將呼叫OnNavigatedFrom 方法;
      2)、當使用者從其它頁面導航到該頁面時呼叫OnNavigatedTo 方法。

       // 離開主頁面  
        protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
        {
            base.OnNavigatedFrom(e);

            System.Diagnostics.Debug.WriteLine("***** 已離開主頁面。");
        }

        // 導航到第二個頁面  
        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);

            System.Diagnostics.Debug.WriteLine("*****  Hi,已經來到第二個頁面了。");
        } 


7、頁之間傳遞引數

 this.NavigationService.Navigate(new Uri("/pageSecond.xaml?str=" + textBox1.Text, UriKind.Relative));

 // 導航到第二個頁面  
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
      base.OnNavigatedTo(e);
     // 傳遞的引數叫什麼名字,這裡就按什麼名字來取。  
     string pv = this.NavigationContext.QueryString["str"];
     this.textBlock1.Text = pv;


8、如何遮蔽掉“回退”按鈕?
這種情況下不多見,遮蔽掉回退按鈕意味著無法通過按下“回退”進行向後導航,這個做法要慎用。
要完成該操作,就得處理BackKeyPress事件,把事件引數e的Cancel屬性設定為true即可取消“回退”鍵的操作。

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
    base.OnBackKeyPress(e);
     e.Cancel = true;
}


9、如何刪除導航歷史記錄?
比如說,我現在從主頁導航到頁面B,再從頁面B導航到頁面C,但我不希望使用者導航回頁面B,而是直接導航回主頁。

我們要在導航的回退歷史記錄中刪除頁面B,所以,我們在離開頁面B後把歷史記錄刪除。也就是說,在頁面B中重寫OnNavigatedFrom方法。

    protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)  
    {  
        base.OnNavigatedFrom(e);  
        PhoneApplicationFrame myFrame = Application.Current.RootVisual as PhoneApplicationFrame;  
        if (myFrame != null)  
        {  
            try  
            {  
                myFrame.RemoveBackEntry();  
            }  
            catch (InvalidOperationException ex)  
            {  
                MessageBox.Show(ex.Message);  
            }  
        }  
      
    } 

從例子中看到,使用PhoneApplicationFrame類的RemoveBackEntry方法刪除最新一條記錄,每次只刪除一條,要刪除多條,就呼叫N次。因為導航歷史記錄是棧結構的,後進先出,所以,就像你拿一堆書放在桌面上一樣,首先拿掉的是放在最上面的,如下圖所示:


10、使用State儲存頁面的暫態資料

在頁面填寫資料的




相關文章