为什么我的AppBar在Page load上显示为ClosedDisplayMode.Compact而不管实际设置如何?

时间:2017-01-23 23:34:49

标签: c# uwp uwp-xaml mytoolkit

我将Win8.1应用移植到UWP for Win10并遇到AppBar的奇怪问题。我们已尝试使用CommandBar代替AppBar,但问题仍然存在。我们在最新版本的MyToolkit(撰写本文时为2.5.16)。我们的观点如下:

SomeView来自BaseView的{​​{1}}个设备(源自MtPage

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

HomeView

其中<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,其中包含一些按钮,UserControlNavigationViewContext描述哪些按钮应在哪个页面上有效,等等。

问题在于,这会产生一种半开,半闭的NavigationViewModel外观(几乎但不完全如同AppBar设置为ClosedDisplayMode),如此:

enter image description here

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

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

enter image description here

我们已尝试处理视图的AppBarClosedDisplayMode.Minimal事件并手动强制NavigatedToClosedDisplayMode,但这不会影响渲染输出(和在任何情况下,实时可视树都确认已经正确设置为Minimal)。

为什么会发生这种情况的任何想法,和/或如何使用Minimal呈现AppBar而不必先导航?我确定我可能会以某种方式暴力破解,但我觉得这可能是一种更好的方式,或者我错过了一些非常简单的事情。

1 个答案:

答案 0 :(得分:4)

只需切换到CommandBar即可。对于CommandBarMinimal两种模式,Compact都可以完美地开箱即用。 CommandBarAppBar推荐的首选控件。显然,保持AppBar的唯一原因是尽量减少变化。

AppBar - MSDN

  

重要事项只有在升级时才应使用AppBar   使用AppBar的通用Windows 8应用程序,需要最小化   变化。对于Windows 10中的新应用程序,我们建议使用CommandBar   控制而不是。

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>