c# - UWP/C# 框架导航问题
问题描述
抱歉标题很草率。因此,我将以下处理程序链接到嵌套在 NavigationView 中的 AppbarButton 设置按钮
private void SettingsButton_Click(object sender, RoutedEventArgs e)
{
Frame.Navigate(typeof(Content_Pages.SettingsPage));
}
它目前所做的只是导航到我预定义的设置页面。现在我遇到的问题是我上面也有这个处理导航视图选择
private void NavView_SelectionChanged(Windows.UI.Xaml.Controls.NavigationView sender, Windows.UI.Xaml.Controls.NavigationViewSelectionChangedEventArgs args)
{
NavigationViewItem item = args.SelectedItem as NavigationViewItem;
switch (item.Tag.ToString())
{
case "OverView_Page":
ContentFrame.Navigate(typeof(Content_Pages.Overview_Page));
break;
}
}
这里的明显区别是ContentFrame部分。它允许所需页面显示为导航视图的一部分。
我完成 SettingsButton_Click 的方式意味着当单击按钮时我会松开导航菜单,因为它调用 Frame.Navigate 而不是 Content.Navigate。
我试图调整 SettingsButton_Click 以使用 ContentFrame.Navigate 无济于事,因为它实际上是嵌套在 NavigationView 中的 AppBarButton。
<AppBarButton Icon="Setting" Margin="1, 2, 0, 0" Tag="Settings_Page" HorizontalAlignment="Center" Width="56.5" Height="56.5" ClickMode="Press" Click="SettingsButton_Click"/>
我不确定如何将其更改为 ContentFrame.Navigate 而不是 Frame.Navigate。你能帮忙看看我摔倒在哪里吗?
编辑:
根据要求,MainPage.XAML
<Page
x:Class="BudgetSheet.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="using:Microsoft.UI.Xaml.Controls"
xmlns:local="using:BudgetSheet"
xmlns:mux="using:Windows.UI.Xaml.Controls"
xmlns:muxcontrols="using:Microsoft.UI.Xaml.Controls"
RequestedTheme="Dark">
<Page.Resources>
</Page.Resources>
<Grid>
<Grid.Resources>
<ResourceDictionary>
<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Dark">
<SolidColorBrush x:Key="DarkBrush" Color="{StaticResource SystemBaseHighColor}"/>
<AcrylicBrush x:Key="NavigationViewDefaultPaneBackground"
BackgroundSource="Backdrop"
TintColor="#262626"
TintOpacity="0.8"
FallbackColor="#262626"/>
</ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>
</ResourceDictionary>
</Grid.Resources>
<mux:NavigationView IsSettingsVisible="False"
PaneTitle=" Budget Sheet Menu "
x:Name="NavView"
IsBackButtonVisible="Collapsed"
PaneDisplayMode="LeftMinimal"
AlwaysShowHeader="True"
SelectionChanged="NavView_SelectionChanged"
Background="{StaticResource CustomAcrylicDarkBackground}">
<mux:NavigationView.MenuItems>
<StackPanel Orientation="Horizontal" UseLayoutRounding="False">
<AppBarButton Icon="Page2" Margin="0, 2, 1, 0" Tag="New_Sheet" HorizontalAlignment="Center" Width="56.5" Height="56.5" ClickMode="Press" />
<AppBarButton Icon="OpenFile" Margin="1, 2, 0, 0" Tag="Open_Sheet" HorizontalAlignment="Center" Width="56.5" Height="56.5" ClickMode="Press" />
<AppBarButton Icon="Save" Margin="1, 2, 0, 0" Tag="Save_Sheet" HorizontalAlignment="Center" Width="56.5" Height="56.5" ClickMode="Press"/>
<AppBarButton Icon="Setting" Margin="1, 2, 0, 0" Tag="Settings_Page" HorizontalAlignment="Center" Width="56.5" Height="56.5" ClickMode="Press" Click="SettingsButton_Click"/>
<AppBarButton Icon="Calculator" Margin="1, 2, 0, 0" Tag="Calculator_Open" HorizontalAlignment="Center" Width="56.5" Height="56.5" ClickMode="Press" />
</StackPanel>
<mux:NavigationViewItemSeparator/>
<mux:NavigationViewItem Name="HomeItem"
Content="HOME"
Tag="HOME_Page"
FontSize="22"
HorizontalAlignment="Stretch"
FontWeight="Bold"
Foreground="#b880fc"/>
<NavigationViewItemSeparator/>
<mux:NavigationViewItem Name="OverviewItem"
Content="OVERVIEW"
Tag="OverView_Page"
FontSize="22"
HorizontalAlignment="Stretch"
FontWeight="Bold"
Foreground="#b880fc"/>
<mux:NavigationViewItem Name="BillsItem"
Content="BILLS"
Tag="Bills_Page"
FontSize="22"
HorizontalAlignment="Stretch"
FontWeight="Bold"
Foreground="#b880fc"/>
<mux:NavigationViewItem Name="PeopleItem"
Content="PEOPLE"
Tag="BillPayer_Page"
FontSize="22"
HorizontalAlignment="Stretch"
FontWeight="Bold"
Foreground="#b880fc"/>
<mux:NavigationViewItem Name="TransfersItem"
Content="TRANSFERS"
Tag="Transfers_Page"
FontSize="22"
HorizontalAlignment="Stretch"
FontWeight="Bold"
Foreground="#b880fc"/>
<mux:NavigationViewItem Name="PayDatesItem"
Content="PAY DATES"
Tag="PayDates_Page"
FontSize="22"
HorizontalAlignment="Stretch"
FontWeight="Bold"
Foreground="#b880fc"/>
</mux:NavigationView.MenuItems>
<Frame x:Name="ContentFrame">
<Frame.ContentTransitions>
<TransitionCollection>
<NavigationThemeTransition/>
</TransitionCollection>
</Frame.ContentTransitions>
</Frame>
<NavigationView.PaneFooter>
<Button x:Name="ChangeUser" Style="{StaticResource TextBlockButtonStyle}" Foreground="#b880fc" >
<StackPanel HorizontalAlignment="Stretch" Orientation="Horizontal">
<SymbolIcon Symbol="Contact" Margin="8"/>
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Right">
Change User
</TextBlock>
</StackPanel>
</Button>
</NavigationView.PaneFooter>
</mux:NavigationView>
</Grid>
</Page>
解决方案
如果您将属性添加到MainPage.xaml.cs
:
public Frame TheContentFrame
{
get => ContentFrame;
}
..在获得对using类的引用后,您应该能够设置Content
of ContentFrame
the :MainPage
MainPage
VisualTreeHelper
private void SettingsButton_Click(object sender, RoutedEventArgs e)
{
MainPage mainPage = FindParent<MainPage>(this);
if (mainPage != null)
mainPage.TheContentFrame.Navigate(typeof(Content_Pages.SettingsPage));
}
private static T FindParent<T>(DependencyObject dependencyObject) where T : DependencyObject
{
var parent = VisualTreeHelper.GetParent(dependencyObject);
if (parent == null) return null;
var parentT = parent as T;
return parentT ?? FindParent<T>(parent);
}
推荐阅读
- excel - 将 .mat 文件转换为 csv 文件时出错
- c# - Wpf 文本框的正则表达式浮点数格式化程序
- go - 从异步函数/ goroutine 返回错误/成功的惯用方式
- chart.js - Chart.js - 我在哪里可以找到应该注册的组件?
- reactjs - 在反应中使用 MapLabel 在谷歌地图的多边形上显示标签
- javascript - 将回调转为承诺并使用 `await`
- java - 如何取消 gRPC 中的一元服务?
- mysql - 获取用户在排行榜中的位置
- excel - 如何在 dd/mm/yyyy hh/mm 格式的单元格上使用 Sumif?
- iframe - 链接和按钮在 AMP iframe 组件中不起作用