6

我是 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,然后我不想启动该计时器。

4

6 回答 6

8

您可以使用导航窗口的 CurrentSource 属性在后面的代码中获取当前正在运行的页面。根据您的要求,使用 NavigationService.Navigate() 方法完成,如下所示:

导航窗口.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>

导航窗口.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));
        }
    }
}

产品列表.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");
于 2011-10-04T06:23:39.977 回答
3

我有一个类似的问题。Upendra 在上面接受的答案引导我朝着正确的方向前进。我的问题是我在 FRAME 中使用了不同的 WPF 页面。我需要确定框架内显示的页面。我是这样想的。

    Object CurrentPage;

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

如果使用 CurrentPage.ToString(),则 CurrentPage 对象成为加载页面的类名;

于 2013-08-12T17:18:01.843 回答
1

我通过查看容器窗口的 NavigationService 的 Content 属性找到了当前页面。

于 2013-09-05T16:03:35.390 回答
1

如果我们想知道当前页面显示在框架内的完整路径,那么我们可以使用它:

string currentpage = Myframe.CurrentSource.OriginalString.ToString().Replace("yoursolutionname;component/", "");
于 2015-02-04T16:56:00.997 回答
1

在每个页面中使用页面加载事件来删除返回条目并仅显示当前页面

内部页面加载使用 NavigationService 函数 RemoveBackEntry()

于 2019-02-18T05:38:33.813 回答
0

NavigationWindow有一个名为的属性,CurrentSource它是导航的最后一页的 URI

于 2011-09-30T14:17:44.417 回答