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

标签 c# uwp uwp-xaml mytoolkit

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

SomeView源自 BaseView来自 MtPage 的服务(源自 Page )

因此,对于特定 View (在本例中为 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>

在哪里NavigationViewUserControl有一些按钮,和NavigationViewContextNavigationViewModel描述哪些按钮应该在哪个页面上处于事件状态,等等。

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

enter image description here

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

奇怪的是,如果用户离开 HomeView到其他 View ,然后返回到它,AppBar使用 AppBarClosedDisplayMode.Minimal 正确呈现(!):

enter image description here

我们已经尝试处理 View 的 NavigatedTo事件和手动强制 ClosedDisplayModeMinimal ,但这不会影响呈现的输出(并且在任何情况下,实时可视化树确认它已经被正确设置为 Minimal )。

任何想法为什么会发生这种情况,和/或如何导致 AppBarClosedDisplayMode = Minimal 渲染无需先导航?我确定我可能会以某种方式强制执行此操作,但我觉得可能有更好的方法,或者我遗漏了一些非常简单的东西。

最佳答案

只需切换到 CommandBarCommandBar 开箱即用,适用于 MinimalCompact 模式。 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.

enter image description here

页面:

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

关于c# - 为什么我的 AppBar 在页面加载时显示为 ClosedDisplayMode.Compact 而不管实际设置如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41817593/

相关文章:

c# - 引用 .ccproj 中的运行时内容 (Azure SDK 2.9)

c# - 对 IComparable 对象进行排序,其中一些为 null

c# - Nunit 使用 TestCaseSource 运行 TestCase,第一次迭代没有参数?为什么?

c# - Pivot SelectedItem 属性导致 Windows UWP 崩溃

c# - 应用程序设置绑定(bind)最佳实践

c# - 通用 Windows (UWP) 范围 slider

c# - UWP App 不显示图片

c# - 为什么 C# 从覆盖属性而不是覆盖属性中获取值?

windows-store-apps - 手动更改 package.appxmanifest 而不是将 UWP 应用程序与商店关联

xaml - 何时在 UserControl 上使用模板化控件?