如何动态更改 Windows Phone 的图标按钮和菜单项【转】

本主题介绍如何在运行时动态更改应用程序栏上的图标按钮和菜单项。由于应用程序栏不是 Silverlight 控件,因此应用程序栏不支持某些常见的控件功能,如数据绑定。这意味着您不能通过使用采用 XAML 设置的名称属性来更改图标按钮和菜单项文本。如果您想在运行时更改它们,则应该使用代码创建您的应用程序栏。有关更多信息,请参阅 Windows Phone 的应用程序栏概述

在这些过程中,您创建一个具有一个按钮的应用程序栏。当用户单击该按钮时,该按钮在播放和暂停之间切换。您更改该按钮的文本和图标。还创建一个菜单项并切换该菜单项的文本。

向应用程序中添加图标按钮图像

在此过程中,您添加用于该按钮的播放和暂停图标。有关更多信息,请参阅 Windows Phone 的应用程序栏图标按钮


 

添加图标按钮图像的步骤

  1. “解决方案资源管理器”中,右键单击项目,指向“添加”,然后单击“新文件夹”

  2. 将该文件夹命名为 Images

  3. “解决方案资源管理器”中,右键单击文件夹 Images,指向“添加”,然后单击“现有项”

  4. 浏览到以下位置之一来查找标准图标:

    C:\Program Files\Microsoft SDKs\Windows Phone\v7.0\Icons\dark

    C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.0\Icons\dark

  5. 选择以下文件,然后单击“添加”。根据显示的内容重命名这些文件。

     

    原始名称

    新名称

    appbar.transport.play.rest.png

    play.png

    appbar.transport.pause.rest.png

    pause.png

  6. “解决方案资源管理器”中,选择这两个新文件。

  7. “属性”窗口中,为这两个新文件设置下列属性。

     

    属性

    生成操作

    内容

    复制到输出目录

    如果较新则复制

 


在此过程中,您创建应用程序栏,并添加一个按钮和一个菜单项。有关更多信息,请参阅如何在 Windows Phone 的代码中创建应用程序栏

采用代码创建应用程序栏的步骤

  1. 在编辑器中打开您页面的代码隐藏文件。

  2. 在代码的顶部,添加以下语句。

    1. using Microsoft.Phone.Shell;
    Imports Microsoft.Phone.Shell
  3. 在页面的构造函数中,在对 InitializeComponent 的调用之后,添加以下代码。该代码初始化一个新的应用程序栏对象,创建按钮和菜单项,设置初始文本和图标并标识单击事件处理程序。

    1. ApplicationBar = new ApplicationBar();
    2. ApplicationBarIconButton button1 = new ApplicationBarIconButton();
    3. button1.IconUri = new Uri("/Images/play.png", UriKind.Relative);
    4. button1.Text = "play";
    5. ApplicationBar.Buttons.Add(button1);
    6. button1.Click += new EventHandler(button1_Click);
    7. ApplicationBarMenuItem menuItem1 = new ApplicationBarMenuItem();
    8. menuItem1.Text = "menu item state 0";
    9. ApplicationBar.MenuItems.Add(menuItem1);
    10. menuItem1.Click += new EventHandler(menuItem1_Click);
    ApplicationBar = new ApplicationBar()
    
    Dim button1 as ApplicationBarIconButton = new ApplicationBarIconButton()
    button1.IconUri = new Uri("/Images/play.png", UriKind.Relative)
    button1.Text = "play"
    ApplicationBar.Buttons.Add(button1)
    AddHandler button1.Click, AddressOf button1_Click
    
    Dim menuItem1 as ApplicationBarMenuItem = new ApplicationBarMenuItem()
    menuItem1.Text = "menu item state 0"
    ApplicationBar.MenuItems.Add(menuItem1)
    AddHandler menuItem1.Click, AddressOf menuItem1_Click
  4. 向页面中添加下面的代码。这些是单击事件处理程序。在下面的过程中向这些方法中添加代码。

    1. private void button1_Click(object sender, EventArgs e)
    2. {
    3. }
    4. private void menuItem1_Click(object sender, EventArgs e)
    5. {
    6. }
    Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
    
    End Sub
    
    Private Sub menuItem1_Click(ByVal sender As Object, ByVal e As EventArgs)
    
    End Sub

    
    
动态更改图标按钮

在这些过程中,您更改图标按钮图像、图标按钮文本和菜单项文本。按钮和菜单项都是应用程序栏对象的集合。由于您知道创建按钮和菜单项的顺序,并且集合非常小,访问这些对象的最简单方法是按它们在集合中的位置。

在这些过程中,您向单击事件中添加仅用于测试的代码。在您自己的应用程序中,只要需要,您就可以使用该代码。

动态更改图标按钮的步骤

  1. 将下面的代码添加到按钮单击事件中。

    1. private void button1_Click(object sender, EventArgs e)
    2. {
    3. ApplicationBarIconButton btn = (ApplicationBarIconButton)ApplicationBar.Buttons[0];
    4. if (btn.Text == "play")
    5. {
    6. btn.Text="pause";
    7. btn.IconUri = new Uri("/Images/pause.png", UriKind.Relative);
    8. }
    9. else if(btn.Text == "pause")
    10. {
    11. btn.Text="play";
    12. btn.IconUri = new Uri("/Images/play.png", UriKind.Relative);
    13. }
    14. }
    Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
    
        Dim btn As ApplicationBarIconButton = ApplicationBar.Buttons(0)
    
        If btn.Text = "play" Then
    
            btn.Text="pause"
            btn.IconUri = New Uri("/Images/pause.png", UriKind.Relative)
    
        ElseIf btn.Text="pause" Then
    
            btn.Text="play"
            btn.IconUri = New Uri("/Images/play.png", UriKind.Relative)
        End If
    End Sub
  2. 保存、生成和运行您的应用程序。

  3. 多次单击该按钮以验证图标和文本是否同时更改,之后是否又更改回来。

动态更改菜单项的步骤

  1. 将下面的代码添加到菜单项单击事件中。

    1. private void menuItem1_Click(object sender, EventArgs e)
    2. {
    3. ApplicationBarMenuItem mi = (ApplicationBarMenuItem)ApplicationBar.MenuItems[0];
    4. if (mi.Text == "menu item state 0")
    5. {
    6. mi.Text="menu item state 1";
    7. }
    8. else if(mi.Text == "menu item state 1")
    9. {
    10. mi.Text="menu item state 0";
    11. }
    12. }
    Private Sub menuItem1_Click(ByVal sender As Object, ByVal e As EventArgs)
    
        Dim mi As ApplicationBarMenuItem = ApplicationBar.MenuItems(0)
    
        If mi.Text = "menu item state 0" Then
    
            mi.Text="menu item state 1"
    
        ElseIf mi.Text="menu item state 1" Then
    
            mi.Text="menu item state 0"
        End If
    End Sub
  2. 保存、生成和运行您的应用程序。

  3. 多次单击该菜单项以验证文本是否更改,之后是否又更改回来。

原文地址:http://msdn.microsoft.com/zh-cn/hh394044

posted @ 2012-05-08 13:44  AGA2012  阅读(322)  评论(0编辑  收藏  举报