Take the 2-minute tour ×

I'm writing an app using WPF (should apply to Silverlight too) where I have a Frame within a main Window and I'm using the NavigationService to navigate through the pages of the Frame.

I am using NavigationService.GoBack to successfully return to the previous page but there are times when I will need to go to a specific page within the NavigationService backstack. If the page doesn't exist in the backstack then I will simply create a new page and navigate to it. By doing this, I'm hoping that the state of the page will be retained if it exists in the backstack, but if it doesn't a new one will be created.


I can't seem to work out how to access the backstack to check if the page exists, and then how to navigate to it if it does.

I'd also like to mention that I'm not using URI to navigate but page objects instead as I need to pass values between pages.

share|improve this question
add comment

1 Answer

up vote 2 down vote accepted


Apparently there is no way to access the backstack from the NavigationService, but Frame exposes a BackStack property, so you can do something like:

if (frame.BackStack.Cast<object>().Contains(thePage))

However there doesn't seem to be a way to jump directly to a specific entry in the history... The best you can do is find the index of the entry, and go back N times to get there, which is quite ugly:

int index = frame.BackStack.Cast<object>()
                 .Select((page, i) => new { page, i + 1 })
                 .Where(x => Equals(x.Page, thePage))
if (index > 0)
    for(int i = 0; i < index; i++) frame.GoBack();
share|improve this answer
Many thanks for your comments Thomas, I'm amazed that the backstack is not accessible! You code was helpful too so thanks again. Mitch –  Mitch Nov 1 '10 at 16:35
Is this still valid? It appears a ContentFrame in Silverlight doesn't have a BackStack property. –  Mike Cole Jun 15 '12 at 20:52
@MikeC., this property doesn't seem to exist in Silverlight. Yet another limitation of SL... –  Thomas Levesque Jun 15 '12 at 21:24
Lame. Thanks for the reply. –  Mike Cole Jun 19 '12 at 3:37
add comment

Your Answer


