Windows 8应用程序上的全局应用程序栏

时间:2013-03-21 07:25:07

标签: c# xaml windows-8 microsoft-metro appbar



我正在开发一个Windows 8应用程序项目。我正在使用Visual Studio 2012及其预定义的模板(GroupedPage,SplitPage,ItemsPage) 这时我需要添加一个App栏。我选择的方式是创建一个并在所有页面上显示它。我读了这篇文章:http://msdn.microsoft.com/en-us/library/windows/apps/xaml/jj150604.aspx

要在我的项目中包含此项,我将全局页面设置为App.xaml上的起始页

protected async override void OnLaunched(LaunchActivatedEventArgs args)
...
  if (!rootFrame.Navigate(typeof(GlobalPage), args.Arguments))
                    throw new Exception("Failed to create initial page");
...

在全局页面上,我正在更改方法OnLaunched,以便进入真正的主页面:

 rootPage = e.Parameter as Page;            
            frame1.Navigate(typeof(MainPage), this);

我为按钮添加事件订阅,例如

 private void ButtonBlogList_Click(object sender, RoutedEventArgs e)
        {
            this.Frame.Navigate(typeof(BlogListManagement), this);
        }

启动应用程序后,将显示应用程序栏,我可以使用内部的应用程序按钮进行导航,但在第一次导航后,AppBar不会显示在目标页面上。

知道我的错误吗?
谢谢你的帮助。

1 个答案:

答案 0 :(得分:10)

您要做的是在LayoutAwarePage上设置AppBar,因为所有页面都来自该页面。 对于AppBar的内容,您可能希望使用UserControl,以便于编码和样式化。

首先创建UserControl:

<UserControl
x:Class="AppBarGlobal.AppbarContent"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:AppBarGlobal"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400">

<StackPanel Orientation="Horizontal">
    <Button
        Content="1"
        Style="{StaticResource AppBarButtonStyle}" />
    <Button
        Content="2"
        Style="{StaticResource AppBarButtonStyle}" />
</StackPanel> </UserControl>

然后在LayoutAwarePage的构造函数中,您要创建AppBar,将内容设置为UserControl,并将其添加到页面上的Buttom或TopAppBar中 - 在此示例中,我使用BottomAppBar并在consturctor中设置everthing ,像这样:

    public LayoutAwarePage()
    {
        bar = new AppBar();
        bar.Content = new AppbarContent();
        this.BottomAppBar = bar;
        //and the remaining code for the constructor hereafter.

这应该允许您在从WindowsAwarePage派生的所有页面上的Windows应用商店应用中拥有全局应用栏。