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);
    }
}

其他方法,如果您从页面内导航,则

  1. 您可以让您的 Page class 有一个接收 Frame 对象的参数化构造函数。

  2. 您可以使用 while 循环向后返回,直到到达第一个页面条目。

  3. 使用一个PageFunctionPageFunction 是一个可以 return 值的页面。

WPF Navigation