0

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

为此,我在 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>

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

    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;
            }
        }

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

另外,我是第一次在这里提问。如果我错过了什么,请告诉我。

谢谢, 悉达特

4

2 回答 2

2

通过页面的 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,我不确定它是用于 Mango 还是 Windows Phone 8。这个项目是 Mango 特定的 http://phone7.codeplex.com/

于 2013-01-11T01:09:44.847 回答
1

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

this.ApplicationBar.IsVisible = false;
于 2013-01-10T19:21:44.930 回答