为什么我的 AppBar 在页面加载时显示为 ClosedDisplayMode.Compact 而不管实际设置如何?

Why does my AppBar appear as ClosedDisplayMode.Compact on Page load regardless of actual setting?

我正在将 Win8.1 应用程序移植到适用于 Win10 的 UWP 并遇到 AppBar 的奇怪问题。我们已经尝试使用 CommandBar 而不是 AppBar,但问题仍然存在。我们使用的是最新版本的 MyToolkit(撰写本文时为 2.5.16)。我们的观点是这样得出的:

SomeView 派生自 BaseView 服务来自 MtPage(派生自 Page

因此,对于特定视图(在本例中为 HomeView),XAML 看起来像:

<views:BaseView
   x:Name="pageRoot"
   x:Class="OurApp.HomeView"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
   xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
   xmlns:controls="using:OurApp.Controls"
   xmlns:views="using:OurApp.Views"
   xmlns:viewModels="using:ViewModels"
   xmlns:fake="using:ViewModels.Fake"
   mc:Ignorable="d" >
   <views:BaseView.TopAppBar>
      <AppBar>
         <controls:NavigationView
            x:Name="NavigationView">
            <controls:NavigationView.Context>
               <viewModels:NavigationViewModel />
            </controls:NavigationView.Context>
         </controls:NavigationView>
      </AppBar>
   </views:BaseView.TopAppBar>
   <!-- other stuff not relevant to AppBars, etc -->
</views:BaseView>

其中 NavigationView 是具有一些按钮的 UserControlNavigationViewContextNavigationViewModel 描述了哪些按钮应该在哪个页面上处于活动状态,等等。

问题是这会导致一种半开半闭的 AppBar 外观(几乎但不完全像 ClosedDisplayMode 设置为 Compact 一样)像这样:

ClosedDisplayMode="Minimal" 添加到 <AppBar> 控件后,如 中所述,实时可视化树确认 AppBar 具有 IsOpen = 0AppBarClosedDisplayMode.Minimal...但它仍然像上面的屏幕截图一样顽固地显示为半打开状态。

奇怪的是,如果用户从 HomeView 导航到其他视图然后返回到它,AppBar 会正确呈现为 AppBarClosedDisplayMode.Minimal (!):

我们已经尝试处理视图的 NavigatedTo 事件并手动将 ClosedDisplayMode 强制为 Minimal,但这不会影响渲染输出(无论如何,实时可视化树确认已将其正确设置为 Minimal)。

知道为什么会这样吗?and/or 如何使 AppBar 不用先导航就可以用 ClosedDisplayMode = Minimal 渲染?我确定我可能会以某种方式强制执行此操作,但我觉得可能有更好的方法,或者我遗漏了一些非常简单的东西。

只需切换到 CommandBarCommandBar 对于 MinimalCompact 模式都非常有效 out-of-the-box。 CommandBar 是相对于 AppBar 的推荐首选控件。显然,保留 AppBar 的唯一原因是尽量减少更改。

AppBar - MSDN.

Important You should use the AppBar only when you are upgrading a Universal Windows 8 app that uses the AppBar, and need to minimize changes. For new apps in Windows 10, we recommend using the CommandBar control instead.

页数:

<paging:MtPage
x:Class="App3.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App3"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:paging="using:MyToolkit.Paging"
mc:Ignorable="d">

<paging:MtPage.Resources>
</paging:MtPage.Resources>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
</Grid>

<paging:MtPage.TopAppBar>
    <CommandBar x:Name="appbar1" ClosedDisplayMode="Minimal" >
        <CommandBar.Content>
            <local:MyUserControl1></local:MyUserControl1>
        </CommandBar.Content>
    </CommandBar>
</paging:MtPage.TopAppBar>

用户控制:

<UserControl
x:Class="App3.MyUserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App3"
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">

<Grid>
    <StackPanel Orientation="Horizontal">
        <AppBarButton Icon="Home" Label="Home"></AppBarButton>
        <AppBarButton Icon="Back" Label="Back"></AppBarButton>
        <AppBarButton Icon="Rotate" Label="Rotate"></AppBarButton>
    </StackPanel>
</Grid>