删除导航服务上的转发条目?
Posted
技术标签:
【中文标题】删除导航服务上的转发条目?【英文标题】: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);
【问题讨论】:
【参考方案1】:嗯,答案永远不会太晚!
以下代码将简单地禁用向前导航:
void Frame_Navigating(object sender, NavigatingCancelEventArgs e)
bool b = e.NavigationMode == NavigationMode.Forward;
if (b)
e.Cancel = true;
目前它适用于Frame.Navigating 事件,但它应该适用于Application
和NavigationWindow
(虽然没有测试)。
编辑:
这里是Behavior
的Frame
:
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 资源管理器中一样。
如果您不希望刷新显示在后备列表中,则可以从后备列表中删除最后一个条目。
【讨论】:
我确实想知道,我不希望为当前页面添加一个后退条目。我想最好的方法是尝试一下。 我在使用这个解决方案时遇到了问题,我无法加载当前页面,我只能加载此页面的新实例,但我担心它会被添加到日志堆栈中。以上是关于删除导航服务上的转发条目?的主要内容,如果未能解决你的问题,请参考以下文章