Windows Phone 7 學習筆記 - 系統托盤和應用程序欄

fmms 12年前發布 | 19K 次閱讀 Windows Phone開發 移動開發 Windows Phone

系統托盤

系統托盤僅僅顯示一些系統的狀態,有時候我們要隱藏它,用下面的代碼:

this.SetValue(SystemTray.IsVisibleProperty,!(bool)this.GetValue(SystemTray.IsVisibleProperty));

注意不要忘了引入Microsoft.Phone.Shell這一命名空間。

應用程序欄

1、使用XAML生成應用程序欄

Windows Phone SDK 附帶的頁面模板包含被注釋掉的示例應用程序欄的 XAML。取消 XAML 的注釋以創建應用程序欄。如:

<phone:PhoneApplicationPage.ApplicationBar>
    <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
        <shell:ApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="Button 1"/>

        <shell:ApplicationBarIconButton IconUri="/Images/appbar_button2.png" Text="Button 2"/>
        <shell:ApplicationBar.MenuItems>
            <shell:ApplicationBarMenuItem Text="MenuItem 1"/>
            <shell:ApplicationBarMenuItem Text="MenuItem 2"/>

        </shell:ApplicationBar.MenuItems>
    </shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>

增刪改點內容就可以用了,要注意引用的圖片需要把屬性修改為content

2、使用C#生成應用程序欄

有時應用程序欄需要根據用戶的操作來改變應用程序欄的一些設置,這樣通過XAML生成應用程序欄就行不通了,所以需要通過C#來生成應用程序欄。

(1)在代碼的頂部,添加Microsoft.Phone.Shell這一命名空間。

using Microsoft.Phone.Shell;

(2)在頁面的構造函數中,在對 InitializeComponent 的調用之后,添加以下代碼。該代碼初始化新的 ApplicationBar 對象并將該對象分配給頁面的 ApplicationBar 屬性。

ApplicationBar = new ApplicationBar();

(3)設置所需的應用程序欄屬性。

ApplicationBar.Mode = ApplicationBarMode.Default;
ApplicationBar.Opacity = 1.0; 
ApplicationBar.IsVisible = true;
ApplicationBar.IsMenuEnabled = true;

(4)根據需要創建一個或多個 ApplicationBarIconButton 對象。設置圖標圖像和按鈕文本,然后將它們添加到應用程序欄。如果您未設置按鈕文本,則會發生運行時異常。

ApplicationBarIconButton button1 = new ApplicationBarIconButton();
button1.IconUri = new Uri("/Images/YourImage.png", UriKind.Relative);
button1.Text = "button 1";
ApplicationBar.Buttons.Add(button1);

(5)菜單項是可選的。根據需要創建一個或多個 ApplicationBarMenuItem 對象。設置文本,然后將它們添加到應用程序欄。

ApplicationBarMenuItem menuItem1 = new ApplicationBarMenuItem();
menuItem1.Text = "menu item 1";
ApplicationBar.MenuItems.Add(menuItem1);

(6)下面是一個已完成的應用程序欄示例。

public MainPage()
{
    InitializeComponent();

    ApplicationBar = new ApplicationBar();

    ApplicationBar.Mode = ApplicationBarMode.Default;
    ApplicationBar.Opacity = 1.0; 
    ApplicationBar.IsVisible = true;
    ApplicationBar.IsMenuEnabled = true;

    ApplicationBarIconButton button1 = new ApplicationBarIconButton();
    button1.IconUri = new Uri("/Images/YourImage.png", UriKind.Relative);
    button1.Text = "button 1";
    ApplicationBar.Buttons.Add(button1);

    ApplicationBarMenuItem menuItem1 = new ApplicationBarMenuItem();
    menuItem1.Text = "menu item 1";
    ApplicationBar.MenuItems.Add(menuItem1);
}

(7)對于每個圖標按鈕和菜單項,確定用戶單擊時要調用的事件。下面是來自上一過程的、確定了單擊事件的應用程序欄的示例。

ApplicationBarIconButton button1 = new ApplicationBarIconButton();
button1.IconUri = new Uri("/Images/YourImage.png", UriKind.Relative);
button1.Text = "button 1";
ApplicationBar.Buttons.Add(button1);
button1.Click += new EventHandler(button1_Click);

ApplicationBarMenuItem menuItem1 = new ApplicationBarMenuItem();
menuItem1.Text = "menu item 1";
ApplicationBar.MenuItems.Add(menuItem1);
menuItem1.Click += new EventHandler(menuItem1_Click);

(8)對于每個圖標按鈕和菜單項,添加用戶單擊時要調用的事件。在頁面類中添加代碼。下面是來自上一過程的應用程序欄的單擊事件示例。

private void button1_Click(object sender, EventArgs e)
{
    MessageBox.Show("Button 1 works!");
    //Do work for your application here.
}

private void menuItem1_Click(object sender, EventArgs e)
{
    MessageBox.Show("Menu item 1 works!");
    //Do work for your application here.
}

3、透明度

透明度可以設置為0到1的數值,但是推薦使用0,0.5或者是1。如:

shell:ApplicationBar IsVisible=“True” IsMenuEnabled=“True” Opacity=“0.5”

4、使用Expression Blend 創建應用程序欄

(1)先解開注釋掉的ApplicationBar;

(2)右鍵該頁面使用Expression Blend 打開;

Windows Phone 7 學習筆記 - 系統托盤和應用程序欄

 

(3)打開此頁面后,看到Expression Blend 左邊的面板上Objects and Timeline 面板;

Windows Phone 7 學習筆記 - 系統托盤和應用程序欄

 

(4)如上面板的內容,微軟為我們默認添加了兩個ApplicationBarIconButton(最多四個)和兩個 ApplicationBarMenuItem,下面編輯這四個節點的內容,并為其添加點擊事件和圖片內容。點擊第一個 ApplicationBarMenuItem,中間的顯示圖效果自動定位并顯示,如下圖:

Windows Phone 7 學習筆記 - 系統托盤和應用程序欄

 

(5)視角右移到右上角,并選中第一個選項卡:元素屬性,面板的最右邊有兩個選擇圖標。如下圖所示,藍色箭頭代碼元素的基本屬性(包括Name和Text,其他UI有更多屬性這里不詳細介紹),紅色箭頭代表該元素的事件;

Windows Phone 7 學習筆記 - 系統托盤和應用程序欄

 

(6)好了,認識了一些基本的原理,下面來改改吧,將Name 改為“AboutApplicationBar ”。然后,將對應的Text 改為“關于”。轉到事件面板,雙擊它,它會自動幫我們在CS代碼里面生成一個事件句柄,像這樣:

Windows Phone 7 學習筆記 - 系統托盤和應用程序欄

 

(7)根據上面的操作,將下面的 ApplicationBarMenuItem改為“查看圖片”的菜單。下面來做ApplicationBarIconButton,具體操作跟上面是一 致的,唯一區別的是ApplicationBarIconButton 需要一個圖片資源,利用Expresssion Blend 可以很方便的為其添加圖片資源,并且這些圖片資源都是微軟建議使用的圖片,選中ApplicationBarIconButton 會看到面板屬性比上面的MenuItem多了一個屬性,如下圖這個屬性是一個圖片的地址,并且它是一個下拉框允許我們選擇,看看圖吧:

Windows Phone 7 學習筆記 - 系統托盤和應用程序欄

ps:這些圖片位于C:\Program Files\Microsoft SDKs\Windows Phone\v7.0\Icons 目錄。


補充:(1)由于應用程序欄不是 Silverlight 控件,并不繼承自FrameworkElement,因此應用程序欄不支持某些常見的控件功能,如數據綁定。這意味著不能通過使用 XAML 格式的名稱屬性來更改圖標按鈕和菜單項。如果您希望在運行時動態修改文本或圖標,則應該使用 C# 或 Visual Basic 創建應用程序欄,詳見上面的通過C#生成應用程序欄。


  (2)在有些情況下我們會需要提供橫跨整個應用程序的通用功能,這樣,如果一個一個頁面的顯示ApplicationBar,這樣效率很低,所以可以寫一個通用的ApplicationBar,提供給整個應用程序使用。

由于是提供給整個應用程序使用,所以需要在App.xaml 注冊,如:

<!--注冊 應用程序欄-->
        <shell:ApplicationBar x:Key="MainAppBar" IsVisible="True">

            <!--菜單項 Abou-->
            <shell:ApplicationBar.MenuItems>
                <shell:ApplicationBarMenuItem Text="About" Click="ApplicationBarMenuItem_Click"/>
            </shell:ApplicationBar.MenuItems>


            <!--應用程序條 按鈕-->
            <shell:ApplicationBar.Buttons>
                <shell:ApplicationBarIconButton Text="Web" IconUri="ie_icon.png" Click="ApplicationBarIconButton_Click"/>

                <shell:ApplicationBarIconButton Text="Images" IconUri="pictures_Icon.png" Click="ImageEvent_Click"/>
            </shell:ApplicationBar.Buttons>
        </shell:ApplicationBar>

進入APP.xaml.cs在自動生成的事件中,鍵入代碼:

private void ApplicationBarMenuItem_Click(object sender, EventArgs e)
        {
            PhoneApplicationFrame root = Application.Current.RootVisual as PhoneApplicationFrame;
            root.Navigate(new Uri("/About", UriKind.Relative));
        }

        private void ApplicationBarIconButton_Click(object sender, EventArgs e)
        {

        }

        private void ImageEvent_Click(object sender, EventArgs e)
        {
            PhoneApplicationFrame root = Application.Current.RootVisual as PhoneApplicationFrame;
            root.Navigate(new Uri("/Pictures",UriKind.Relative));
        }

這樣ApplicationBar就已經注冊好了,在需要顯示應用程序欄的頁面的phone:PhoneApplicationPage節點指定ApplicationBar來源,比如本文的指定方式:

<phone:PhoneApplicationPage 
    x:Class="DataBind.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: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"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"

    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    shell:SystemTray.IsVisible="True"
    ApplicationBar="{StaticResource MainAppBar}"

    >

原文鏈接:http://www.cnblogs.com/zhangkai2237/archive/2012/02/14/2351372.html

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!