return 使用 C# 在 wpf xaml 中打开的第一帧
return to the first frame opened in wpf xaml with C#
我正在创建 WPF 应用程序,该应用程序在几个上部框架中进行,每个打开的框架显示不同的数据,通过 id 重新加载。
如果我想后退一帧,我可以使用这个:
this.NavigationService.GoBack();
但是,问题是,如果我想 return 到第一帧,而不必向我按顺序打开的每个人收费,你可以吗?
输入一个方法:
this.NavigationService.GoFirstFrameOpen ()
有没有类似的功能?如果没有,可能的解决方案?
使用Frame.BackStack属性。
它 return 是一个 IEnumerable,用于枚举框架的后退导航历史记录中的条目。
您可以通过遍历VisualTree来获取包含的Frame。
样本:
private void Button_Click(object sender, RoutedEventArgs e)
{
var leaf = (DependencyObject)sender;
while(leaf.GetType() != typeof(Frame))
{
leaf = VisualTreeHelper.GetParent(leaf);
}
Frame f = leaf as Frame;
if (f != null)
{
JournalEntry firstItem = null;
foreach (JournalEntry item in f.BackStack)
{
firstItem = item;
break;
}
this.NavigationService.Navigate(firstItem.Source);
}
}
其他方法,如果您从页面内导航,则
您可以让您的 Page
class 有一个接收 Frame 对象的参数化构造函数。
您可以使用 while 循环向后返回,直到到达第一个页面条目。
使用一个PageFunction
。 PageFunction 是一个可以 return 值的页面。
我正在创建 WPF 应用程序,该应用程序在几个上部框架中进行,每个打开的框架显示不同的数据,通过 id 重新加载。
如果我想后退一帧,我可以使用这个:
this.NavigationService.GoBack();
但是,问题是,如果我想 return 到第一帧,而不必向我按顺序打开的每个人收费,你可以吗? 输入一个方法:
this.NavigationService.GoFirstFrameOpen ()
有没有类似的功能?如果没有,可能的解决方案?
使用Frame.BackStack属性。 它 return 是一个 IEnumerable,用于枚举框架的后退导航历史记录中的条目。
您可以通过遍历VisualTree来获取包含的Frame。
样本:
private void Button_Click(object sender, RoutedEventArgs e)
{
var leaf = (DependencyObject)sender;
while(leaf.GetType() != typeof(Frame))
{
leaf = VisualTreeHelper.GetParent(leaf);
}
Frame f = leaf as Frame;
if (f != null)
{
JournalEntry firstItem = null;
foreach (JournalEntry item in f.BackStack)
{
firstItem = item;
break;
}
this.NavigationService.Navigate(firstItem.Source);
}
}
其他方法,如果您从页面内导航,则
您可以让您的
Page
class 有一个接收 Frame 对象的参数化构造函数。您可以使用 while 循环向后返回,直到到达第一个页面条目。
使用一个
PageFunction
。 PageFunction 是一个可以 return 值的页面。