为什么我的 AppBar 在页面加载时显示为 ClosedDisplayMode.Compact 而不管实际设置如何?
Why does my AppBar appear as ClosedDisplayMode.Compact on Page load regardless of actual setting?
我正在将 Win8.1 应用程序移植到适用于 Win10 的 UWP 并遇到 AppBar
的奇怪问题。我们已经尝试使用 CommandBar
而不是 AppBar
,但问题仍然存在。我们使用的是最新版本的 MyToolkit(撰写本文时为 2.5.16)。我们的观点是这样得出的:
SomeView
派生自 BaseView
服务来自 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>
控件后,如 中所述,实时可视化树确认 AppBar 具有 IsOpen = 0
和 AppBarClosedDisplayMode.Minimal
...但它仍然像上面的屏幕截图一样顽固地显示为半打开状态。
奇怪的是,如果用户从 HomeView
导航到其他视图然后返回到它,AppBar
会正确呈现为 AppBarClosedDisplayMode.Minimal
(!):
我们已经尝试处理视图的 NavigatedTo
事件并手动将 ClosedDisplayMode
强制为 Minimal
,但这不会影响渲染输出(无论如何,实时可视化树确认已将其正确设置为 Minimal
)。
知道为什么会这样吗?and/or 如何使 AppBar
不用先导航就可以用 ClosedDisplayMode = Minimal
渲染?我确定我可能会以某种方式强制执行此操作,但我觉得可能有更好的方法,或者我遗漏了一些非常简单的东西。
只需切换到 CommandBar
。 CommandBar
对于 Minimal
和 Compact
模式都非常有效 out-of-the-box。 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>
我正在将 Win8.1 应用程序移植到适用于 Win10 的 UWP 并遇到 AppBar
的奇怪问题。我们已经尝试使用 CommandBar
而不是 AppBar
,但问题仍然存在。我们使用的是最新版本的 MyToolkit(撰写本文时为 2.5.16)。我们的观点是这样得出的:
SomeView
派生自 BaseView
服务来自 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>
控件后,如 IsOpen = 0
和 AppBarClosedDisplayMode.Minimal
...但它仍然像上面的屏幕截图一样顽固地显示为半打开状态。
奇怪的是,如果用户从 HomeView
导航到其他视图然后返回到它,AppBar
会正确呈现为 AppBarClosedDisplayMode.Minimal
(!):
我们已经尝试处理视图的 NavigatedTo
事件并手动将 ClosedDisplayMode
强制为 Minimal
,但这不会影响渲染输出(无论如何,实时可视化树确认已将其正确设置为 Minimal
)。
知道为什么会这样吗?and/or 如何使 AppBar
不用先导航就可以用 ClosedDisplayMode = Minimal
渲染?我确定我可能会以某种方式强制执行此操作,但我觉得可能有更好的方法,或者我遗漏了一些非常简单的东西。
只需切换到 CommandBar
。 CommandBar
对于 Minimal
和 Compact
模式都非常有效 out-of-the-box。 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>