在xaml中创建应用程序栏并在代码中对其进行操作

时间:2013-01-10 17:48:47

标签: c# windows-phone-7 xaml

我正在学习在Windows Phone(Mango)中开发应用程序。在Panorama页面中使用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>

然后,我尝试通过全景页面x:name事件中SelectionChanged属性访问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

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:1)

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

this.ApplicationBar.IsVisible = false;