Удалить форвардную запись в Навигационной службе? - PullRequest
5 голосов
/ 15 декабря 2009

Как можно удалить все записи пересылки в службе навигации?

Я пробовал это, но это сбой.

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

Ответы [ 3 ]

2 голосов
/ 21 октября 2014

Ну, никогда не поздно ответить!

Следующий фрагмент кода просто отключит прямую навигацию:

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

            e.Cancel = true;
        }
    }

В настоящее время это событие Frame.Navigating , но оно должно применяться как к Application, так и к NavigationWindow (хотя и не тестировал).

EDIT:

Вот 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();
        }
    }
}
0 голосов
/ 16 декабря 2009

Я прочитал в навигации wpf немного больше, и если вы можете получить экземпляр NavigationWindow для вашего приложения, есть свойство ForwardStack, которое содержит список страниц прямой навигации. Вы должны иметь возможность добавлять или удалять страницы оттуда.

Я не пробовал сам, так как у меня нет проекта, чтобы проверить это прямо сейчас, поэтому дайте мне знать, если это работает, как я хотел бы попробовать это сам в будущем.

См. MSDN ссылку для полного списка членов: http://msdn.microsoft.com/en-us/library/system.windows.navigation.navigationwindow_members.aspx

0 голосов
/ 15 декабря 2009

Если вы переместитесь на текущую страницу после того, как вернетесь назад, вы потеряете все данные пересылки так же, как в веб-браузере или в проводнике Windows.

Если вы не хотите, чтобы обновление отображалось в заднем списке, вы можете удалить последнюю запись из заднего списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...