Вы можете получить текущую страницу в коде, используя свойство CurrentSource окна навигации.В соответствии с вашими требованиями, это делается с использованием метода NavigationService.Navigate (), как показано ниже:
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>
Работаетхорошо для меня.Надеюсь, что это решит вашу проблему.Пожалуйста, не стесняйтесь спрашивать, если это не решить.
ОБНОВЛЕНИЕ:
Если вы хотите перемещаться по странице, используя имя класса вместо Uri, то вы можете получить текущий источник, например:
MessageBox.Show(((NavigationWindow)this).NavigationService.Content.GetType().Name.ToString() + ".xaml");