WPF中页面之间的导航?

6

我有一个WPF应用程序,我的按钮在我添加的一个窗口上,当我点击它时,我想要这个按钮打开一个页面。

NavigationService nav = NavigationService.GetNavigationService(this); 
nav.Navigate(new Uri("xamlFeedbackPage.xaml", UriKind.RelativeOrAbsolute));

我尝试了在线的那段代码,但当我点击按钮时我的应用程序崩溃了。有什么帮助吗?

“xamlFeedbackPage.xaml” 是否位于您的项目根目录中?否则,您可能需要将其更改为类似于“/Pages/xamlFeedbackPage.xaml”的内容。并尝试将 UriKind 设置为 Absolute。 - Youp Bernoulli
@YoupTube http://i.stack.imgur.com/i2R5G.png 是的,正如你从图片中看到的那样,它在根文件夹中包含所有其他页面/窗口。 - Ben Clarke
导航服务是否存在有效(非空)引用? - Youp Bernoulli
@YoupTube 是的,有的。using System.Windows.Navigation; - Ben Clarke
1
我认为@YoupTube的意思是要确保nav不为空。 - Tejas Sharma
显示剩余2条评论
3个回答

1

请查看这篇文章MSDN文章,它们包含关于哪种类型适合导航(页面)以及在哪个容器中托管它们(基本上是框架)的解释。然后您应该会取得一些成功。

编辑

请查看这个详细的示例,问题将变得清晰明了。


嘿,我看了那些文章,我会尝试跟着做,但我认为问题在于你只能从页面导航到另一个页面,而我想要从窗口导航到页面。 - Ben Clarke
我创建了一个名为HostInWindowFrame.xaml的新窗口,并添加了一个框架,但我不理解它的工作方式? - Ben Clarke
然后,您将Frame.Content设置为特定页面(其中包含一个按钮),当您按下该按钮时,调用最初发布的代码。 - Youp Bernoulli

0
    public PageFunction1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        NavigationService nav = NavigationService.GetNavigationService(this);
        nav.Navigate(new Uri("page2.xaml",UriKind.RelativeOrAbsolute));
    }

你只需使用页面而不是窗口,或者你可以使用导航窗口。你明白我的意思吗? - Jani
3
请在您的回答中添加描述。 - zohar

0

不需要在代码中调用任何东西,因为它可以通过 XAML 自身完成。

App.xaml

        <Application x:Class="WpfApplication1.App"
                     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                     StartupUri="Page1.xaml">
        </Application>

页面1

        <Page x:Class="WpfApplication1.Page1"
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              Title="Page1">
            <StackPanel>
                <TextBlock>
                    Go to <Hyperlink NavigateUri="Page2.xaml"> Page 2 </Hyperlink>
                </TextBlock>
            </StackPanel>
        </Page>

浏览示例

第二页

        <Page x:Class="WpfApplication1.Page2"
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              Title="Page2"> 
            <StackPanel>
                <TextBlock Margin="10">Welcome to Page2.</TextBlock>
                <TextBlock Margin="10">
                    Go back to <Hyperlink NavigateUri="Page1.xaml"> Page 1 </Hyperlink>
                </TextBlock>
            </StackPanel>
        </Page>

我认为在XAML中硬编码导航值不是最佳解决方案。 - Curtwagner1984

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