如何将Page1.xaml打开到MainWindow.xaml

时间:2016-01-15 18:05:22

标签: c# wpf xaml visual-studio-2013

我有一个非常简单的桌面应用程序我正在处理但是我在执行一些基本任务时遇到了问题。我使用的是Visual Studio 2013。

我已经从空白的WPF模板创建了一个项目。我创建了一个名为Page1.xaml的新页面,以配合默认的MainWindow.xaml窗口。

在我的MainWindow.xaml窗口中,我有网格,网格内部是一个图像。

<Grid MouseDown="Grid_MouseDown_1" Cursor="Hand" >
    <Image Name="ImageIntro" Source="images/Stories-intro.jpg" Stretch="None" />
</Grid>

网格有一个MouseDown事件,以便我可以检测用户何时点击网格内的任何位置。

private void Grid_MouseDown_1(object sender, MouseButtonEventArgs e)
    {

    }

非常基本,所有工作和编译都按预期进行。

我遇到的问题是我无法在MainWindow.xaml上的窗口中加载Page1.xaml。我不想打开一个单独的窗口,我只想让Page1.xaml上的内容显示在MainWindow.xaml的可见窗口内。

我尝试使用以下内容,但是当我点击我的链接时出现错误:未处理的类型&#39; System.NullReferenceException&#39;发生

private void Grid_MouseDown_1(object sender, MouseButtonEventArgs e)
    {
        Uri uri = new Uri("Page1.xaml", UriKind.Relative);
        NavigationService ns = NavigationService.GetNavigationService(this);
        ns.Navigate(uri);            
    }

这不是一个浏览器应用程序,它只是一个桌面应用程序。第一个屏幕(MainWindow.xaml)应该只需单击直到显示第二个屏幕(Page1.xaml)。

我希望Page1.xaml内容占用整个MainWindow.xaml窗口(抱歉,但我不能强调这一点,我不想要一个框架或来自MainWindow.xaml的任何内容当用户在Page1.xaml上时显示。

我对桌面应用程序很陌生,但我对.Net C#有广泛的知识,可用于Web应用程序。如果有更好的方法来实现这一目标,我并不反对改变我所拥有的流程。例如,也许我不应该使用Window to Page导航,而应该使用Window to Window或其他东西。

我认为这将是一项相对简单的任务,但我还没有发现任何可行的东西,所以希望有人可以解释它。

3 个答案:

答案 0 :(得分:1)

阅读此MSDN链接,要求工作的要求说明this(在您的代码中)必须是Frame。我在这里看不到任何XAML代码,但我猜测this是一个Window。您需要一个框架来托管导航,因此您的MainWindow可能只是框架,并且当前窗口的内容应为“Page0”。

答案 1 :(得分:1)

在主窗口中创建一个框架

  

然后在你的事件处理人员

  Page1 mypage=new Page1();//object of the page 1

  frame.Navigate(mypage);//pass it to frame navigate method

答案 2 :(得分:1)

谢谢所有帮助的人,这是我使用的解决方案(我想确保代码示例适用于将来遇到同样问题的任何人)。

我在MainWindow.xaml页面添加了一个Frame:

<Grid MouseDown="Grid_MouseDown_1" Cursor="Hand" >
    <Image Name="ImageIntro" Source="images/Stories-intro.jpg" Stretch="None" />
    <Frame Name="Frame1" Content="" HorizontalAlignment="Left" VerticalAlignment="Top"/>
</Grid>

然后我将以下内容添加到我的活动中:

private void Grid_MouseDown_1(object sender, MouseButtonEventArgs e)
    {
        Page1 mypage = new Page1();
        Frame1.Navigate(mypage);
    }

这让我可以点击我的链接和新页面,Page1.xaml出现了。还有一个导航栏出现在顶部,内容并没有完全占用MainWindow.xaml窗口,但我想我可以摆弄设置,并把它带到我想要的地方。

非常感谢Filippo B,Nauman Ahmad和CodingGorilla的协助。