【问题标题】:How to open Page1.xaml into MainWindow.xaml如何将 Page1.xaml 打开到 MainWindow.xaml
【发布时间】:2016-01-15 18:05:22
【问题描述】:

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

我从空白 WPF 模板创建了一个项目。我创建了一个名为 Page1.xaml 的新页面,与默认的 MainWindow.xaml 窗口一起使用。

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

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

Grid 有一个 MouseDown 事件,因此我可以检测用户何时单击 Grid 内的任何位置。

private void Grid_MouseDown_1(object sender, MouseButtonEventArgs e)
    {

    }

非常基本,一切都按预期工作和编译。

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

我尝试使用以下内容,但在单击链接时出现错误:发生“System.NullReferenceException”类型的未处理异常

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)。

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

我想这将是一个相对简单的任务,但我还没有找到任何可行的方法,所以希望这里有人可以解释一下。

【问题讨论】:

  • 我不记得 GetNavigationService() 需要任何参数
  • 如果我从 GetNavigationService() 中删除“this”,则代码无法编译。
  • @FilippoB msdn.microsoft.com/en-us/library/…DependencyObject 作为参数。
  • 这对我没有帮助,是否有任何示例代码仅显示导航到正在运行的页面?当然,我似乎缺少像框架或导航窗口这样的关键元素,但我不知道如何实现它。就像我说的,从窗口导航到新页面应该不是一项复杂的任务,但我在该页面上没有看到任何示例说明如何做到这一点。
  • 我想我现在更了解这一点了,我的 NavigationService ns 正在返回 null ......但究竟为什么呢?我是否缺少页面上的元素?

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


【解决方案1】:

在主窗口中创建一个框架

然后在你的事件处理程序中

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

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

【讨论】:

  • 谢谢,你和 CodingGorilla 为我指明了正确的方向。我在 MainWindow.xaml 中添加了一个框架(在 Grid 标签内 ),然后在我使用 Page1 mypage = new Page1( ); Frame1.Navigate(mypage);
  • 欢迎您,如果以上答案对您有帮助,请将其标记为接受,因为它会帮助其他人:)
【解决方案2】:

阅读此MSDN 链接,其工作要求是this(在您的代码中)必须是Frame。我在这里没有看到任何 XAML 代码,但我猜 this 是一个窗口。您需要一个框架来承载导航,因此您的 MainWindow 应该只是框架,并且当前窗口的内容应该是“Page0”。

【讨论】:

    【解决方案3】:

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

    我在 MainWindow.xaml 页面中添加了一个框架:

    <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 的协助。

    【讨论】:

      猜你喜欢
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      • 2021-05-30
      • 1970-01-01
      • 2012-12-10
      • 1970-01-01
      • 2014-11-23
      相关资源
      最近更新 更多