7

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

SomeView派生BaseViewMtPage(派生自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>

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

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

在此处输入图像描述

添加ClosedDisplayMode="Minimal"到控件后,正如在这个问题<AppBar>中提到的那样,实时可视化树确认 AppBar 具有并且...但它仍然顽固地显示为半开状态,如上面的屏幕截图所示。IsOpen = 0AppBarClosedDisplayMode.Minimal

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

在此处输入图像描述

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

任何想法为什么会发生这种情况,和/或如何在无需先导航的情况下AppBar进行渲染?ClosedDisplayMode = Minimal我敢肯定,我可能会以某种方式暴力破解,但我觉得可能有更好的方法,或者我错过了一些非常简单的东西。

4

1 回答 1

4

只需切换到CommandBar. CommandBar开箱即用的效果非常好,适用于两者MinimalCompact模式。CommandBar是推荐的首选控制AppBar。显然,保留的唯一原因AppBar是尽量减少更改。

应用栏-MSDN

重要提示 只有在升级使用 AppBar 的通用 Windows 8 应用程序时才应使用 AppBar,并且需要最小化更改。对于 Windows 10 中的新应用,我们建议改用 CommandBar 控件。

在此处输入图像描述

页:

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

于 2017-01-29T13:37:50.653 回答