【发布时间】:2017-01-23 23:34:49
【问题描述】:
我正在将 Win8.1 应用程序移植到适用于 Win10 的 UWP 并遇到 AppBar 的奇怪问题。我们尝试使用CommandBar 而不是AppBar,但问题仍然存在。我们使用的是最新版本的 MyToolkit(撰写本文时为 2.5.16)。我们的观点是这样得出的:
SomeView 派生自 BaseView dervices 从 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 是具有一些按钮的UserControl,NavigationViewContext 和NavigationViewModel 描述了哪些按钮应该在哪个页面上处于活动状态,等等。
问题在于,这会导致一种半开半闭的AppBar 外观(几乎但不完全就像将ClosedDisplayMode 设置为Compact),如下所示:
将ClosedDisplayMode="Minimal" 添加到<AppBar> 控件后,正如this question 中提到的那样,实时可视化树确认AppBar 具有IsOpen = 0 和AppBarClosedDisplayMode.Minimal...但它仍然顽固地显示为半开如上图所示。
奇怪的是,如果用户从 HomeView 导航到其他视图然后返回到它,AppBar 会正确呈现为 AppBarClosedDisplayMode.Minimal (!):
我们已经尝试处理视图的 NavigatedTo 事件并手动强制 ClosedDisplayMode 到 Minimal,但这不会影响渲染输出(无论如何,实时可视化树确认这已经在正确设置为Minimal)。
任何想法为什么会发生这种情况,和/或如何使AppBar 以ClosedDisplayMode = Minimal 呈现而无需先导航?我确信我可能会以某种方式强制执行此操作,但我觉得可能有更好的方法,或者我错过了一些非常简单的东西。
【问题讨论】:
-
您是否尝试过编辑模板并评论紧凑视图部分?
-
没有。问题不在于它被设置为
Compact- 实时视觉树证实了这一点 - 而是它以某种方式被渲染到一半打开,看起来好像它被设置为Compact。 -
AppBar和CommandBar拥有大量的视觉状态和相关动画。您所描述的效果可能是其中之一。这是找出哪一个的问题。看HERE。 -
光看名字就应该是
ClipGeometryTransform。 -
其实,只要根据
ClosedDisplayMode调整AppBarThemeMinimalHeight或AppBarThemeCompactHeight,似乎就可以了。