Получить текущую текущую страницу в WPF-навигации NavigationWindow - PullRequest
6 голосов
/ 22 сентября 2011

Я новичок в WPF, я разрабатываю навигационное приложение WPF,

<NavigationWindow x:Class="KioskTraffic.MainWindow"
    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="Home.xaml"
    WindowState="Maximized" ResizeMode="NoResize" ShowsNavigationUI="False" WindowStyle="None" Cursor="Arrow" Closing="NavigationWindow_Closing"></NavigationWindow>

и у меня есть страница, которая отображается в этом окне навигации как

<Page x:Class="KioskTraffic.Page1"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      Height="768" Width="1024"
      Title="Page1">

Как узнать, какая страница запущена в данный момент в файле NavigationWindow.xaml.cs?

В этом окне навигации есть таймер, который хочет проверить, является ли текущая страница home.xaml, тогда я не хочу запускать этот таймер.

Ответы [ 6 ]

7 голосов
/ 04 октября 2011

Вы можете получить текущую страницу в коде, используя свойство 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");
3 голосов
/ 12 августа 2013

У меня была похожая проблема.Принятый ответ Упендры выше привел меня в правильном направлении.Моя проблема заключалась в том, что я использовал разные страницы WPF внутри FRAME.Мне нужно было определить, какая страница отображалась внутри фрейма.Вот как я это понял.

    Object CurrentPage;

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

Объект CurrentPage становится именем класса загруженной страницы, если используется CurrentPage.ToString ();

1 голос
/ 04 февраля 2015

если мы хотим узнать текущую страницу с полным путем, которая отображается внутри фрейма, тогда мы можем использовать это:

string currentpage = Myframe.CurrentSource.OriginalString.ToString().Replace("yoursolutionname;component/", "");
1 голос
/ 05 сентября 2013

Я узнал свою текущую страницу, просмотрев свойство Content в NavigationService моего окна контейнера.

0 голосов
/ 18 февраля 2019

Использование события загрузки страницы на каждой странице для удаления задних записей и отображения только текущей страницы.

Загрузка внутренней страницы. Использование функции NavigationService RemoveBackEntry ()

0 голосов
/ 30 сентября 2011

У NavigationWindow есть свойство с именем CurrentSource, которое является URI последней пройденной страницы

...