在xaml中创建应用程序栏,并在代码中操作它

本文关键字:代码 操作 xaml 创建 应用程序 | 更新日期: 2023-09-27 17:51:19

我正在学习开发Windows Phone (for Mango)应用程序。在全景页面中使用appbar时,我希望根据所选择的页面(如音乐+视频应用程序)更改菜单项和按钮文本等。

为此,我在xaml中创建了应用程序栏:
    <phone:PhoneApplicationPage.ApplicationBar>
        <shell:ApplicationBar x:Name="appbar" IsMenuEnabled="True" IsVisible="True">
            <shell:ApplicationBarIconButton Text="Add" IconUri="/add.png" x:Name="btn" Click="Addbtn"/>
            <shell:ApplicationBar.MenuItems>
                <shell:ApplicationBarMenuItem Text="Exit" x:Name="menuitem" Click="menubtn"/>
            </shell:ApplicationBar.MenuItems>
        </shell:ApplicationBar>
    </phone:PhoneApplicationPage.ApplicationBar>

然后,我尝试通过在全景页面的SelectionChanged事件中通过其x:name属性访问appbar来操纵控件:

    private void PanoControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (PanoControl.SelectedIndex == 0)
                appbar.IsMenuEnabled = false;
            else if(PanoControl.SelectedIndex == 1)
                menuitem.IsEnabled = false;
            else if (PanoControl.SelectedIndex == 2)
            {
                appbar.IsVisible = true;
                menuitem.IsEnabled = true;
            }
        }

当从一个全景页面移动到另一个全景页面时,会产生一个异常。请帮帮我。这可能吗?

而且,我是第一次在这里问问题。如果我错过了什么,请告诉我。

谢谢,Siddhant

在xaml中创建应用程序栏,并在代码中操作它

通过页面的ApplicationBar属性访问应用程序栏项。它使操作变得繁琐。

private void PanoControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (PanoControl.SelectedIndex == 0)
        this.ApplicationBar.IsVisible = false;
    else if(PanoControl.SelectedIndex == 1)
        ((ApplicationBarMenuItem)ApplicationBar.MenuItems[0]).IsEnabled = false;
    else if (PanoControl.SelectedIndex == 2)
    {
        this.ApplicationBar.IsVisible = false;
        ((ApplicationBarMenuItem)ApplicationBar.MenuItems[0]).IsEnabled = false;
    }
}

社区已经开发了一些解决方案。一个是BindableApplicationBar,我不确定它是针对芒果还是Windows Phone 8的。这个项目是芒果特有的http://phone7.codeplex.com/

因为ApplicationBar是一个shell对象,你不能像其他XAML对象那样用名字引用它。它与您的页面相关联,因此您可以使用this.ApplicationBar:

this.ApplicationBar.IsVisible = false;