首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NavigationView与TabView碰撞

NavigationView与TabView碰撞
EN

Stack Overflow用户
提问于 2019-09-10 02:48:26
回答 1查看 652关注 0票数 2

从图片的顶部可以看到,NavigationView的汉堡包按钮与我的TabView.TabStartHeader重叠。TabViewFrame of MainPage中,NavigationViewMainPage中。

现在,我希望它们与左边的汉堡包按钮和右边的Add按钮水平对齐。我怎样才能做到这一点?

MainPage的XAML:https://github.com/SeakyLuo/SMPlayer/blob/master/SMPlayer/MainPage.xaml

TabView的XAML:https://github.com/SeakyLuo/SMPlayer/blob/master/SMPlayer/PlaylistsPage.xaml

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-10 06:47:19

您所面临的问题是由于NavigationView的默认行为造成的。每当将窗口大小缩小到一定的限制时,PaneDisplayMode将更改为LeftMinimal,以增加可视区域。因此,先前位于导航视图旁边的Frame现在就在导航栏的正下方。因此,Tab View的"New“按钮位于导航栏的”汉堡包按钮“之下。

突出显示的选择显示了框架所覆盖的区域,该框架具有带有TabView的页面。

要防止这种情况发生,最简单的方法是为所有屏幕大小指定一个PaneDisplayMode

代码语言:javascript
复制
<NavigationView
            x:Name="MainNavigationView"
            ........
            PaneDisplayMode="LeftCompact">

更好的方法是使用PaneDisplayMode或Adaptive触发器切换VisualStateManager

例如,对于大于~700 to的窗口大小(根据您的喜好),可以将PaneDisplayMode作为“汽车”,而对于较低的窗口大小,您可以将其切换到“顶”/“左紧凑型”。

XAML代码

代码语言:javascript
复制
<VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="VisualStateGroup">
            <VisualState x:Name="VisualStateMin0">
                <VisualState.Setters>
                    <Setter Target="MainNavigationView.(NavigationView.PaneDisplayMode)" Value="LeftCompact"/>
                </VisualState.Setters>
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="1" MinWindowHeight="1"/>
                </VisualState.StateTriggers>
            </VisualState>
            <VisualState x:Name="VisualStateMin700">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="700" MinWindowHeight="1"/>
                </VisualState.StateTriggers>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>

你应该看到这样的行为:

PaneDisplayMode -适用于小窗口大小的顶部

PaneDisplayMode -左边的紧凑型用于小窗口大小:

Seaky Luo's 注释之后更新:

确切的解决方案(虽然它看起来不像其他解决方案那样自然):

为此,当窗口大小较小且NavigationView切换到LeftMinimal时,需要向"New“按钮添加左边距。

我发现,当宽度在640左右时,导航视图进入LeftMinimal (您可能需要微调这个数字)。

XAML代码:要添加到框架内调用的页面的(本例中为PlayListsPage.xaml)

代码语言:javascript
复制
<VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="VisualStateGroup">
            <VisualState x:Name="VisualStateMin0">
                <VisualState.Setters>
                    <Setter Target="NewPlaylistButton.(FrameworkElement.Margin)">
                        <Setter.Value>
                            <Thickness>40,0,0,0</Thickness>
                        </Setter.Value>
                    </Setter>
                </VisualState.Setters>
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="1" MinWindowHeight="1"/>
                </VisualState.StateTriggers>
            </VisualState>
            <VisualState x:Name="VisualStateMin640">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="640" MinWindowHeight="1"/>
                </VisualState.StateTriggers>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>

它应该是这样的:

希望这能帮上忙!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57863399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档