【问题标题】:Why does my AppBar appear as ClosedDisplayMode.Compact on Page load regardless of actual setting?无论实际设置如何,为什么我的 AppBar 在页面加载时显示为 ClosedDisplayMode.Compact?
【发布时间】: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 是具有一些按钮的UserControlNavigationViewContextNavigationViewModel 描述了哪些按钮应该在哪个页面上处于活动状态,等等。

问题在于,这会导致一种半开半闭的AppBar 外观(几乎但不完全就像将ClosedDisplayMode 设置为Compact),如下所示:

ClosedDisplayMode="Minimal" 添加到&lt;AppBar&gt; 控件后,正如this question 中提到的那样,实时可视化树确认AppBar 具有IsOpen = 0AppBarClosedDisplayMode.Minimal...但它仍然顽固地显示为半开如上图所示。

奇怪的是,如果用户从 HomeView 导航到其他视图然后返回到它,AppBar 会正确呈现为 AppBarClosedDisplayMode.Minimal (!):

我们已经尝试处理视图的 NavigatedTo 事件并手动强制 ClosedDisplayModeMinimal,但这不会影响渲染输出(无论如何,实时可视化树确认这已经在正确设置为Minimal)。

任何想法为什么会发生这种情况,和/或如何使AppBarClosedDisplayMode = Minimal 呈现而无需先导航?我确信我可能会以某种方式强制执行此操作,但我觉得可能有更好的方法,或者我错过了一些非常简单的东西。

【问题讨论】:

  • 您是否尝试过编辑模板并评论紧凑视图部分?
  • 没有。问题不在于它被设置为Compact - 实时视觉树证实了这一点 - 而是它以某种方式被渲染到一半打开,看起来好像它被设置为Compact
  • AppBarCommandBar 拥有大量的视觉状态和相关动画。您所描述的效果可能是其中之一。这是找出哪一个的问题。看HERE
  • 光看名字就应该是ClipGeometryTransform
  • 其实,只要根据ClosedDisplayMode调整AppBarThemeMinimalHeightAppBarThemeCompactHeight,似乎就可以了。

标签: c# uwp uwp-xaml mytoolkit


【解决方案1】:

只需切换到CommandBarCommandBarMinimalCompact 模式下都可以很好地开箱即用。 CommandBarAppBar 的推荐首选控件。显然,保留AppBar 的唯一原因是尽量减少更改。

AppBar - MSDN.

重要您应该仅在升级应用程序时使用 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多