我正在将 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>
在哪里NavigationView
是 UserControl
有一些按钮,和NavigationViewContext
和 NavigationViewModel
描述哪些按钮应该在哪个页面上处于事件状态,等等。
问题是这会导致一种半开半闭的状态 AppBar
外观(几乎但不完全像 ClosedDisplayMode
设置为 Compact
)像这样:
添加后ClosedDisplayMode="Minimal"
到 <AppBar>
控制,如 this question 中提到的,实时可视化树确认 AppBar 有 IsOpen = 0
和 AppBarClosedDisplayMode.Minimal
...但它仍然顽固地显示为半开状态,如上面的屏幕截图所示。
奇怪的是,如果用户离开 HomeView
到其他 View ,然后返回到它,AppBar
使用 AppBarClosedDisplayMode.Minimal
正确呈现(!):
我们已经尝试处理 View 的 NavigatedTo
事件和手动强制 ClosedDisplayMode
至 Minimal
,但这不会影响呈现的输出(并且在任何情况下,实时可视化树确认它已经被正确设置为 Minimal
)。
任何想法为什么会发生这种情况,和/或如何导致 AppBar
用 ClosedDisplayMode = Minimal
渲染无需先导航?我确定我可能会以某种方式强制执行此操作,但我觉得可能有更好的方法,或者我遗漏了一些非常简单的东西。
最佳答案
只需切换到 CommandBar
。 CommandBar
开箱即用,适用于 Minimal
和 Compact
模式。 CommandBar
是相对于 AppBar
的推荐首选控件。显然,保留 AppBar
的唯一原因是尽量减少更改。
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>
关于c# - 为什么我的 AppBar 在页面加载时显示为 ClosedDisplayMode.Compact 而不管实际设置如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41817593/