C# 打开新页面时,它与NavigationView菜单重叠
我制作了一个基本的应用程序,它有一个带有两个选项的菜单,每个选项都指向一个新页面。问题是,这些页面是在主页面上启动的,因此它与菜单和后面的所有内容重叠。这些页面没有任何内容,它们的代码是一个简单的xaml和xaml.cs 我使用了微软开发者网页提供的一些例子,但结果是一样的。我还没有找到任何其他可能的解决办法,我无法理解发生了什么 包含菜单的页面C# 打开新页面时,它与NavigationView菜单重叠,c#,visual-studio,xaml,uwp,C#,Visual Studio,Xaml,Uwp,我制作了一个基本的应用程序,它有一个带有两个选项的菜单,每个选项都指向一个新页面。问题是,这些页面是在主页面上启动的,因此它与菜单和后面的所有内容重叠。这些页面没有任何内容,它们的代码是一个简单的xaml和xaml.cs 我使用了微软开发者网页提供的一些例子,但结果是一样的。我还没有找到任何其他可能的解决办法,我无法理解发生了什么 包含菜单的页面 <Grid> <NavigationView x:Name="NavView" ItemInvoked="Nav
<Grid>
<NavigationView
x:Name="NavView"
ItemInvoked="NavViewItemInvoked"
Windows10version1803:BackRequested="NavViewBackRequested"
Windows10version1803:IsBackEnabled="{x:Bind Frame.CanGoBack, Mode=OneWay}"
>
<NavigationView.MenuItems>
<NavigationViewItem x:Name="HomePage" Content="Home" Icon="Home" />
<NavigationViewItem x:Name="AddPage" Content="Add" Icon="Add" />
</NavigationView.MenuItems>
<NavigationView.AutoSuggestBox>
<AutoSuggestBox x:Name="SearchBox" QueryIcon="Find" />
</NavigationView.AutoSuggestBox>
<ScrollViewer>
<frame x:Name="ContentFrame" Padding="12,0,12,24" IsTabStop="True" NavigationFailed="ContentFrame_NavigationFailed" />
</ScrollViewer>
</NavigationView>
<frame x:Name="frame" Margin="20,0,0,0" Navigating="OnNavigatingToPage">
<Frame.ContentTransitions>
<TransitionCollection>
<NavigationThemeTransition>
<NavigationThemeTransition.DefaultNavigationTransitionInfo>
<EntranceNavigationTransitionInfo />
</NavigationThemeTransition.DefaultNavigationTransitionInfo>
</NavigationThemeTransition>
</TransitionCollection>
</Frame.ContentTransitions>
</frame>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState>
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="{x:Bind NavView.CompactModeThresholdWidth}" />
</VisualState.StateTriggers>
<VisualState.Setters>
<!-- Leave the next line for left-only navigation. -->
<Setter Target="ContentFrame.Padding" Value="24,0,24,24" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Grid>
我希望有人能告诉我发生了什么或者哪里出了错
非常感谢您的UI结构如下所示
NavigationView
(Frame
)ContentFrame
(Frame
)AppFrame
导航视图
和第二个框架
位于同一级别,并且都位于根网格
内,没有指定任何网格.列
或网格.行
属性。在这种情况下,框架
位于导航视图
的正上方。起初,这并不重要,因为那里没有内容,因此框架
是“不可见的”。但是,一旦您在框架中实际导航,页面将完全覆盖导航视图,而该视图将依次“消失”
然而,我感到困惑的是,代码中有两个Frame
控件。您实际应该使用的是名为ContentFrame
的。这是嵌入在NavigationView
中的,这是显示页面最常用的方式。因此,如果您完全删除第二个框架
,并将所有代码改为使用ContentFrame
,您应该可以获得所需的行为。UI的结构如下所示
NavigationView
Frame
(ContentFrame
)
Frame
(AppFrame
)
XAML中的基本规则是,对于同一级别的内容,代码后面的内容将绘制在前面的内容之上。当然,这是非常简单的,因为您可以以不重叠的方式布局面板的子级,但我们现在正在考虑您的特殊情况
导航视图
和第二个框架
位于同一级别,并且都位于根网格
内,没有指定任何网格.列
或网格.行
属性。在这种情况下,框架
位于导航视图
的正上方。起初,这并不重要,因为那里没有内容,因此框架
是“不可见的”。但是,一旦您在框架中实际导航,页面将完全覆盖导航视图,而该视图将依次“消失”
然而,我感到困惑的是,代码中有两个Frame
控件。您实际应该使用的是名为ContentFrame
的。这是嵌入在NavigationView
中的,这是显示页面最常用的方式。因此,如果您完全删除第二个框架
,并将所有代码改为使用ContentFrame
,您应该可以获得所需的行为。据我所知,您的要求是拥有一个导航视图,该视图将使用一个框架在应用程序的不同页面之间导航
我简化了您的解决方案,希望这会有所帮助。
在下面的解决方案中,我使用了单个框架进行导航
XAML
<Grid>
<NavigationView x:Name="NavView" ItemInvoked="NavViewItemInvoked">
<NavigationView.MenuItems>
<NavigationViewItem x:Name="HomePage" Content="Home" Icon="Home" />
<NavigationViewItem x:Name="AddPage" Content="Add" Icon="Add" />
</NavigationView.MenuItems>
<NavigationView.AutoSuggestBox>
<AutoSuggestBox x:Name="SearchBox" QueryIcon="Find" />
</NavigationView.AutoSuggestBox>
<!-- Removed scroll viewer not sure if this is required -->
<Frame x:Name="ContentFrame" IsTabStop="True"
NavigationFailed="ContentFrame_NavigationFailed" />
</NavigationView>
</Grid>
说明:
如上所述,此解决方案只有一个导航框架。
每当用户在导航视图中选择一个项目时,它都会将ContentFrame
导航到所需的页面[ContentFrame.navigate(pageType)
];
.
如果您需要更多的解释或根据我的理解参考,请告诉我,您的要求是拥有一个导航视图,该视图将使用一个框架在应用程序的不同页面之间导航
我简化了您的解决方案,希望这会有所帮助。
在下面的解决方案中,我使用了单个框架进行导航
XAML
<Grid>
<NavigationView x:Name="NavView" ItemInvoked="NavViewItemInvoked">
<NavigationView.MenuItems>
<NavigationViewItem x:Name="HomePage" Content="Home" Icon="Home" />
<NavigationViewItem x:Name="AddPage" Content="Add" Icon="Add" />
</NavigationView.MenuItems>
<NavigationView.AutoSuggestBox>
<AutoSuggestBox x:Name="SearchBox" QueryIcon="Find" />
</NavigationView.AutoSuggestBox>
<!-- Removed scroll viewer not sure if this is required -->
<Frame x:Name="ContentFrame" IsTabStop="True"
NavigationFailed="ContentFrame_NavigationFailed" />
</NavigationView>
</Grid>
说明:
如上所述,此解决方案只有一个导航框架。
每当用户在导航视图中选择一个项目时,它都会将ContentFrame
导航到所需的页面[ContentFrame.navigate(pageType)
];
.
如果您需要更多解释或参考请告诉我,您可以告诉我们为什么在页面中使用2个框架吗?(ContentFrame和AppFrame)。另外,您有一个名为“frame”的框架我猜AppFrame和“frame”指的是同一个实例,对吗?很抱歉耽搁了。我对uwp应用程序开发不是很有经验。我知道那时我应该只有一个画面。是的,“AppFrame”指的是其中一个帧,可能是错误的,有两个帧。我稍后会尝试更改它,我会给你一些反馈。你能告诉我们为什么在你的页面中使用两个框架吗?(ContentFrame和AppFrame)。另外,您有一个名为“frame”的框架我猜AppFrame和“frame”指的是同一个实例,对吗?很抱歉耽搁了。我对uwp应用程序开发不是很有经验。我知道我应该只有一帧t
private void NavViewItemInvoked(NavigationView sender, NavigationViewItemInvokedEventArgs args)
{
var label = args.InvokedItem as string;
var pageType =
label == "Home" ? typeof(HomePage) :
label == "Add" ? typeof(AddPage) : null;
if (pageType != null && pageType != ContentFrame.CurrentSourcePageType)
{
ContentFrame.Navigate(pageType);
}
}