Get Current running page in WPF navigation NavigationWindow

You can get current running page in code behind using CurrentSource property of navigation window. As per your requirements, it's done using NavigationService.Navigate() method like below :

NavWindow.xaml :

<NavigationWindow x:Class="WPFTest.MyNavWindow" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="768" Width="1024" Source="ShopList.xaml" Grid.Row="1" 
        WindowState="Maximized" ResizeMode="NoResize" ShowsNavigationUI="True" WindowStyle="SingleBorderWindow" Cursor="Arrow" Navigated="NavigationWindow_Navigated">
</NavigationWindow>

NavWindow.xaml.cs :

namespace WPFTest
{
    public partial class MyNavWindow : NavigationWindow
    {
        public MyNavWindow()
        {
            InitializeComponent();
        }

        private void NavigationWindow_Navigated(object sender, NavigationEventArgs e)
        {
            MessageBox.Show(((NavigationWindow)this).CurrentSource.ToString());
        }
    }
}

ShopList.xaml :

<Page x:Class="WPFTest.ShopList"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ShopList">
<Grid>
    <Label Height="28" Margin="81,12,99,0" Name="label1" VerticalAlignment="Top" FontSize="16" FontWeight="Bold">Shop List</Label>
    <Button Name="btnNext" Content="Go to Product list" Width="150" Height="30" Margin="0,50,0,0" Click="btnNext_Click"></Button>
</Grid>

ShopList.xaml.cs :

namespace WPFTest
{
    public partial class ShopList : Page
    {
        public ShopList()
        {
            InitializeComponent();
        }

        private void btnNext_Click(object sender, RoutedEventArgs e)
        {
            NavigationService.Navigate(new System.Uri("ProductList.xaml", UriKind.Relative));
        }
    }
}

ProductList.xaml :

<Page x:Class="WPFTest.ProductList"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="ProductList">
    <Grid>
        <Label Height="28" Margin="81,12,99,0" Name="label1" VerticalAlignment="Top" FontSize="16" FontWeight="Bold">Product List</Label>
    </Grid>
</Page>

It's working fine for me. Hope this solve your problem. Please feel free to ask if it not solve.

UPDATE :

If you want to navigate page using class name instead of Uri then you can get current source like :

MessageBox.Show(((NavigationWindow)this).NavigationService.Content.GetType().Name.ToString() + ".xaml");

I had a similar problem. Upendra's accepted answer above lead me in the right direction. My problem was I was using different WPF Pages inside a FRAME. I needed to determine what page was being displayed inside the frame. Here's how I figured it out.

    Object CurrentPage;

    private void LSK_1L_Click(object sender, RoutedEventArgs e)
    {
        CurrentPage = MCDU_Page_Frame.Content.GetType();
    }

The CurrentPage object became the class name of the loaded page if used CurrentPage.ToString();