【发布时间】:2023-03-30 04:05:01
【问题描述】:
我在 UWP 中的导航系统有问题。
我有 3 个不同的页面,其中包含 BackRequested 事件。 问题是 Frame 无法返回到第 2 页。
例如:
Page 1 -> Page 2 -> Page 3 -> BACKBUTTON -> Page 1
我想访问第二页而不是第一页。
因为我想要一个导航栏,所以我决定创建一个母版页,其中包含一个框架控件。例如,此控件称为“层”。
我可以使用此代码导航到第二页
Layer.Navigate(typeof(BlankPage2), this);
“this”包含我需要从第二页访问图层的整个 FirstPage。
当我想调用第三页时,代码是这样的
_FirstPage.Layer.Navigate(BlankPage2),this);
我可以通过使用获取 FirstPage 实例
protected async override void OnNavigatedTo(NavigationEventArgs e)
{FirstPage _FirstPage = e.Parameter as FirstPage;}
我认为问题在于我的 FirstPage 实例与第二页中的给定参数不同。
我可以尝试调用 FirstPage(如
WinForm -> (Form1) master = (Form1)Application.OpenForms["Form1"];)
但我不知道如何打开页面...
这方面的标准是什么?
如何在一个页面中有一个包含不同页面的导航栏??
我对语法感到抱歉。由于 Windows 10 支持键盘输入,它会尝试将任何 worenter code hered 从英语更正为德语。
*编辑
我尝试创建一个测试项目,看看它是如何在没有 UIElement(框架)的情况下工作的 我能够获得正确的 BackStack。但不幸的是,问题没有解决!
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
try
{
int count = 0;
StringBuilder sb = new StringBuilder();
foreach (var item in this.Frame.BackStack)
{
count++;
sb.AppendLine(item.SourcePageType.FullName + " " + count.ToString());
}
MessageDialog md = new MessageDialog(sb.ToString());
await md.ShowAsync();
}
catch
{
}
var currentView = SystemNavigationManager.GetForCurrentView();
currentView.AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
currentView.BackRequested += CurrentView_BackRequested;
}
private void CurrentView_BackRequested(object sender, BackRequestedEventArgs e)
{
if (this.Frame.CanGoBack == true) { this.Frame.GoBack();}
}
public BlankPage3()
{
this.InitializeComponent();
}
这是我的主要代码
Sites.ContentPage cp = new Sites.ContentPage();
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
Classes.Transmission.Passwort.CreateTransmissionPasswort ctp = e.Parameter as Classes.Transmission.Passwort.CreateTransmissionPasswort;
this.PW = ctp.PW;
this.cp = ctp.CP;
try
{
int count = 0;
StringBuilder sb = new StringBuilder();
foreach (var item in cp.Layer.BackStack)
{
count++;
sb.AppendLine(item.SourcePageType.FullName + " " + count.ToString());
}
MessageDialog md = new MessageDialog(sb.ToString());
await md.ShowAsync();
}
catch
{
}
var currentView = SystemNavigationManager.GetForCurrentView();
currentView.AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
currentView.BackRequested += CurrentView_BackRequested1;
if(Classes.CheckScreenState.GetFactorType() == Classes.CheckScreenState.DeviceForFactorType.Phone)
{
HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}
if (Classes.CheckScreenState.GetFactorType() != Classes.CheckScreenState.DeviceForFactorType.Phone)
{
Window.Current.CoreWindow.PointerPressed += CoreWindow_PointerPressed;
}
}
private void CoreWindow_PointerPressed(CoreWindow sender, PointerEventArgs args)
{
if (args.CurrentPoint.Properties.IsXButton1Pressed)
{
if (cp.Layer.CanGoBack == true) { cp.Layer.GoBack(); }
var currentView = SystemNavigationManager.GetForCurrentView();
currentView.AppViewBackButtonVisibility = AppViewBackButtonVisibility.Collapsed;
}
if (args.CurrentPoint.Properties.IsXButton2Pressed)
{
if (cp.Layer.CanGoForward == true) { cp.Layer.GoForward(); }
var currentView = SystemNavigationManager.GetForCurrentView();
currentView.AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
}
}
private void CurrentView_BackRequested1(object sender, BackRequestedEventArgs e)
{
if (cp.Layer.CanGoBack == true) {cp.Layer.GoBack(); e.Handled = true; }
var currentView = SystemNavigationManager.GetForCurrentView();
currentView.AppViewBackButtonVisibility = AppViewBackButtonVisibility.Collapsed;
}
private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
if (cp.Layer.CanGoBack == true) {cp.Layer.GoBack(); e.Handled = true; }
var currentView = SystemNavigationManager.GetForCurrentView();
currentView.AppViewBackButtonVisibility = AppViewBackButtonVisibility.Collapsed;
}
CP = ContentPage (MainPage)
【问题讨论】:
-
你不能使用 Window.Current.Frame 作为框架然后找到框架的名称。然后使用该名称来决定导航到哪里?就像当前框架的名称是“BlankPage2”,那么它应该导航到“BlankPage1”。由于帧数有限,您可以手动覆盖导航
-
我已经试过了。没有机会。问题似乎在后台。
标签: c# navigation controls uwp frame