我将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
,其中包含一些按钮,UserControl
和NavigationViewContext
描述哪些按钮应在哪个页面上有效,等等。
问题在于,这会产生一种半开,半闭的NavigationViewModel
外观(几乎但不完全如同AppBar
设置为ClosedDisplayMode
),如此:
将Compact
添加到ClosedDisplayMode="Minimal"
控件后,如this question中所提到的,实时可视树确认AppBar有<AppBar>
和IsOpen = 0
。 ..但它仍然固执地显示为半开,如上面的截图所示。
奇怪的是,如果用户从AppBarClosedDisplayMode.Minimal
导航到某个其他视图然后返回到该视图,则使用HomeView
(!)正确呈现AppBar
:
我们已尝试处理视图的AppBarClosedDisplayMode.Minimal
事件并手动强制NavigatedTo
到ClosedDisplayMode
,但这不会影响渲染输出(和在任何情况下,实时可视树都确认已经正确设置为Minimal
)。
为什么会发生这种情况的任何想法,和/或如何使用Minimal
呈现AppBar
而不必先导航?我确定我可能会以某种方式暴力破解,但我觉得这可能是一种更好的方式,或者我错过了一些非常简单的事情。
答案 0 :(得分:4)
只需切换到CommandBar
即可。对于CommandBar
和Minimal
两种模式,Compact
都可以完美地开箱即用。 CommandBar
是AppBar
推荐的首选控件。显然,保持AppBar
的唯一原因是尽量减少变化。
重要事项只有在升级时才应使用AppBar 使用AppBar的通用Windows 8应用程序,需要最小化 变化。对于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>