【问题标题】:Remove forward entry on Navigation service?删除导航服务上的转发条目?
【发布时间】:2010-12-26 21:24:10
【问题描述】:

如何删除导航服务中的所有转发条目?

我试过了,但它崩溃了。

    while (NavigationService.CanGoForward) NavigationService.RemoveBackEntry();

我知道“RemoveBackEntry()”看起来很奇怪,但没有 RemoveForwardEntry() 方法。

有什么想法吗?

谢谢, 可汗

编辑 1: 我更近一点,我可以访问前向堆栈,甚至可以输出其中的每个项目,但我似乎无法弄清楚如何删除条目。 _frame.ForwardStack 或 j 上的任何属性或方法都没有提供有关如何删除这些条目的任何见解。

        Window mainWindow = Application.Current.MainWindow;
        Frame _frame = (Frame)mainWindow.FindName("mainFrame");
        foreach (JournalEntry j in _frame.ForwardStack)
        {
            MessageBox.Show(j.Name);
        }

【问题讨论】:

    标签: c# wpf navigation


    【解决方案1】:

    嗯,答案永远不会太晚!

    以下代码将简单地禁用向前导航:

        void Frame_Navigating(object sender, NavigatingCancelEventArgs e)
        {
            bool b = e.NavigationMode == NavigationMode.Forward;
            if (b)
            {
    
                e.Cancel = true;
            }
        }
    

    目前它适用于Frame.Navigating 事件,但它应该适用于ApplicationNavigationWindow(虽然没有测试)。

    编辑:

    这里是BehaviorFrame

    public class FrameNavigationBehavior : Behavior<Frame>
    {
        public static readonly DependencyProperty CanGoForwardProperty = DependencyProperty.Register(
            "CanGoForward", typeof (bool), typeof (FrameNavigationBehavior), new PropertyMetadata(true));
    
        public static readonly DependencyProperty CanGoBackwardProperty = DependencyProperty.Register(
            "CanGoBackward", typeof (bool), typeof (FrameNavigationBehavior), new PropertyMetadata(true));
    
        public static readonly DependencyProperty CanRefreshProperty = DependencyProperty.Register(
            "CanRefresh", typeof (bool), typeof (FrameNavigationBehavior), new PropertyMetadata(true));
    
        public bool CanGoForward
        {
            get { return (bool) GetValue(CanGoForwardProperty); }
            set { SetValue(CanGoForwardProperty, value); }
        }
    
        public bool CanGoBackward
        {
            get { return (bool) GetValue(CanGoBackwardProperty); }
            set { SetValue(CanGoBackwardProperty, value); }
        }
    
        public bool CanRefresh
        {
            get { return (bool) GetValue(CanRefreshProperty); }
            set { SetValue(CanRefreshProperty, value); }
        }
    
        protected override void OnAttached()
        {
            base.OnAttached();
            AssociatedObject.Navigating += AssociatedObject_Navigating;
        }
    
        protected override void OnDetaching()
        {
            base.OnDetaching();
            AssociatedObject.Navigating -= AssociatedObject_Navigating;
        }
    
        private void AssociatedObject_Navigating(object sender, NavigatingCancelEventArgs e)
        {
            NavigationMode navigationMode = e.NavigationMode;
            switch (navigationMode)
            {
                case NavigationMode.New:
                    break;
                case NavigationMode.Back:
                    if (!CanGoBackward)
                    {
                        e.Cancel = true;
                    }
                    break;
                case NavigationMode.Forward:
                    if (!CanGoForward)
                    {
                        e.Cancel = true;
                    }
                    break;
                case NavigationMode.Refresh:
                    if (!CanRefresh)
                    {
                        e.Cancel = true;
                    }
                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }
        }
    }
    

    【讨论】:

    • 我不认为这会将它从堆栈中取出,所以它不会清除或任何东西。
    【解决方案2】:

    我进一步阅读了 wpf 导航,如果您可以访问应用程序的 NavigationWindow 实例,则有一个名为 ForwardStack 的属性,其中包含前进导航页面的列表。您应该能够从那里添加或删除页面。

    我自己没有尝试过这个,因为我现在没有一个项目来测试这个所以让我知道这是否有效,因为我想在未来自己尝试这个。

    查看完整成员列表的 msdn 链接:http://msdn.microsoft.com/en-us/library/system.windows.navigation.navigationwindow_members.aspx

    【讨论】:

    • 取得了一些进展,但还不够,请参阅编辑 1。有什么想法吗?
    • 后向和前向堆栈是只读的。如何删除页面?
    【解决方案3】:

    如果您在后退后重新导航到当前页面,您应该会丢失所有前向数据,就像在 Web 浏览器或 Windows 资源管理器中一样。

    如果您不希望刷新显示在后备列表中,则可以从后备列表中删除最后一个条目。

    【讨论】:

    • 我确实想知道,我不希望为当前页面添加一个后退条目。我想最好的方法是尝试一下。
    • 我在使用这个解决方案时遇到了问题,我无法加载当前页面,我只能加载此页面的新实例,但我担心它会被添加到日志堆栈中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 2022-01-21
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多