gpt4 book ai didi

xaml - 如何在 WP 8.1 中与多个页面共享 BottomAppBar

转载 作者:行者123 更新时间:2023-12-05 01:26:22 27 4
gpt4 key购买 nike

我的应用有多个页面,我希望所有页面都有相同的底部应用栏

这是我底部应用栏的代码:

<Page.BottomAppBar>
<CommandBar ClosedDisplayMode="Minimal" Background="#FF004557">
<CommandBar.SecondaryCommands>
<AppBarButton x:Name="AppBar_1" Label="AppBar_1" Click="AppBar_1_Click"/>
<AppBarButton x:Name="AppBar_2" Label="AppBar_2" Click="AppBar_2_Click" />
<AppBarButton x:Name="AppBar_3" Label="Appbar_3" Click="AppBar_3_Click" />
<AppBarButton Label="About" />
</CommandBar.SecondaryCommands>
</CommandBar>
</Page.BottomAppBar>

我该怎么做?

最佳答案

好的。

当您的应用首次运行时,首先执行的是 App.xaml.cs 文件中的 OnLaunched 方法。它可能看起来像这样:

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame == null)
{
rootFrame = new Frame();
Window.Current.Content = rootFrame;
}
if (rootFrame.Content == null)
{
rootFrame.Navigate(typeof(MainPage), e.Arguments);
}
Window.Current.Activate();
}

Windows 8 中的导航由非常类似于浏览器的导航框架处理。如果您将浏览器称为 frame,那么您会得到它。有一个框架,页面在其中加载。您可以加载另一个页面,然后在框架中返回,就像在浏览器中返回到上一页一样。而且,就像您的浏览器有历史一样,您的 Windows 8 XAML 框架有一个 backstack 来完成这个。您也可以继续前进。

OnLaunched 代码在您的应用程序中创建第一帧(因为默认情况下没有)并将其设置为 Windows.Current.Content,这是所有应用程序的 native UI 容器。具体来说,它是行 Window.Current.Content = rootFrame;

从现在开始,您的应用程序中的页面(包括您的 MainPage)将加载到这个新的根框架中。这是 Windows 8 应用程序的典型实现。这随着共享应用栏而改变。共享应用栏不会将 Window.Current.Content 设置为 frame,而是将其设置为内部有框架的根 page .

这里的目标是根 page 永远不会改变。当您导航时,您实际上是在 frame 内导航,而该 frame 本身位于根 page 内。因此,您可以将内容放在根 page 中,例如 appbar。此应用栏将在加载到根页面框架中的所有页面之间共享。

这是一个巧妙的实现。但有一个警告。如果您的任何页面本身需要自定义应用栏,则需要编写大量特殊代码以将页面的应用栏注入(inject)共享应用栏。如果您没有这种“自定义”要求,那么这是一个简单有效的解决方案。

选项 2

您没有理由不能创建一个实现了 AppBarCommandBarUserControl 并将其简单地包含在您要访问的页面中有共同的逻辑。如果我的页面中有任何自定义应用栏的机会,我可能会这样做。

祝你好运!

关于xaml - 如何在 WP 8.1 中与多个页面共享 BottomAppBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24078608/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com