如何从App.xaml.cs导航到其他页面?

3

我的应用程序有不同的页面。因为我想在所有这些页面上都有一个菜单栏,所以我在我的App.xaml中做了以下设置。

通常我会使用NavigationService在不同的页面之间进行导航。 但是如何从我的App.xaml.cs导航到不同的页面呢?

<Application.Resources>
        <Menu x:Key="Menu">
            <DockPanel  VerticalAlignment="Top">
                <Menu DockPanel.Dock="Top" FontSize="14">
                    <MenuItem Header="_File">
                        <Separator />
                        <MenuItem Header="_Exit" />
                    </MenuItem>
                    <MenuItem Header="_Statussen" Click="MenuItem_OnClick"/>
                    <MenuItem Header="_TipsTricks" />
                </Menu>
            </DockPanel>
        </Menu>
    </Application.Resources>

我有一些页面,比如StatussenPage.xaml等,在菜单项点击后应该显示该页面等。

将以下代码添加到我的App.xaml.cs中:

        Page testpage = new TipsTricksPage();

        private void MenuItem_OnClick(object sender, RoutedEventArgs e)
        {
            testpage.NavigationService.Navigate(new TipsTricksPage());
        }

我遇到了以下错误: System.NullReferenceException


请明确您的具体问题或添加更多细节,以准确突出您所需的内容。目前的描述不够清晰,很难确定您在询问什么。请参阅[提问]页面以获取帮助,澄清此问题。 - Hille
@Hille更新了问题,希望现在更清楚了? - Sam Haekens
你遇到了什么错误?为什么这不符合你的需求?你的主窗口是否有一个框架? - Hille
@Hille 更新了它,包括我尝试的内容和我遇到的错误。 - Sam Haekens
你不能在页面上导航到另一个页面。你需要使用类似框架(myFrame.NavigationService.Navigate(new TipsTricksPage());)来显示页面。 - Hille
@SamHaekens:在你的示例中,testpage是做什么的?你打算在哪里显示你试图导航到的TipsTricksPage?你需要在某个地方有一个Frame和一个window - mm8
1个回答

0
在最佳实践中,你应该从一个MainWindow开始编写你的应用程序

在App.xaml中

<Application x:Class="projectname.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:Banc_Suspension_SAHD"
             StartupURI="MainWindow.xaml.cs" // Right here !
             Exit="App_Exit">

然后,在您的MainWindow(应用程序启动时直接打开)中,您可以创建一个菜单,并在MainWindow.cs中处理点击事件。
在MainWindow.Xaml.cs中:
<Window x:Class="projectname.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
    <Grid>
            <Menu>
                <MenuItem Header="Re-Impression PV">
                    <MenuItem Click = "MyActionClick"></MenuItem>
                    <MenuItem></MenuItem>
                </MenuItem>
            <Menu/>
      </Grid>
</Window>

在MainWindow.cs文件中

        private void MyActionClick(object sender, RoutedEventArgs e)
        {
            //Your code
        }

1
是的,这就是我以前的做法。 但是,如何使菜单在我的不同页面上显示,并且具有相同的点击事件呢? - Sam Haekens
您拥有窗口、框架和菜单<window ...><menu ... /><frame ... /></window>,因此该菜单不会受到任何页面更改的影响。 - Hille
@ErosGuil 可以将框架添加到网格中,以明确页面应加载的位置。 - Hille

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接