【问题标题】:Close WPF window that host Pages关闭托管页面的 WPF 窗口
【发布时间】:2016-06-28 10:38:08
【问题描述】:

我目前正在学习 C# WPF。现在我只是想了解导航的工作原理。

我创建了一个包含 2 个按钮的测试应用。一个导航到下一页,另一个导航到新窗口。

页面之间的导航不是问题。

我能够使用按钮从 page1 导航到 page2。下面的代码写在我的Page1.xaml.cs中

private void button_Click(object sender, RoutedEventArgs e)
{
    Page2 p2 = new Page2();
    this.NavigationService.Navigate(p2);
}

问题是当我尝试打开一个新窗口并使用按钮关闭前一个窗口时,它不起作用。 (我也在我的 Page1.xaml.cs 上写了这个)

private void button_Copy_Click(object sender, RoutedEventArgs e)
{
    Window1 win1 = new Window1();
    win1.Show();
    this.Close();
}

它给了我一个错误代码 CS1061 并告诉我它不包含“关闭”的定义。

这是我的 Page1.xaml.cs 的完整代码:

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for Page1.xaml
    /// </summary>
    public partial class Page1 : Page
    {
        public Page1()
        {
            InitializeComponent();
        }

        private void button_Click(object sender, RoutedEventArgs e)
        {
            Page2 p2 = new Page2();
            this.NavigationService.Navigate(p2);
        }

        private void button_Copy_Click(object sender, RoutedEventArgs e)
        {
            Window1 win1 = new Window1();
            win1.Show();
            this.Close();
        }
    }
}

【问题讨论】:

标签: c# wpf windows xaml


【解决方案1】:

这有点猜测,因为我还没有看到足够多的代码。如果调用 this.Close() 被放置在 外部 定义您要关闭的窗口的类中,则在 this 的范围内没有这样的方法.

【讨论】:

  • 我刚刚编辑了我的帖子以包含整个代码。我是这方面的初学者,所以你能彻底解释一下吗。
  • @syn3rgy 假设您不熟悉面向对象编程是否正确? C# 类呢?
  • @Default Yes .. 我想试试 C# 但不知道从哪里开始。
  • @syn3rgy 那么我建议阅读MSDN C# tutorials,IMO 非常擅长学习 C#。在了解 WPF 的复杂性之前至少了解基本概念
  • @syn3rgy 我现在看到了代码。我注意到的一件事是关于 windowpage 之间的区别似乎有些不清楚。您是否打算在您的方法 button_Copy_Click 中关闭当前窗口并打开一个新窗口?如果是这样,我相信你有点偏离正确的方法。
【解决方案2】:

我想出了一个解决办法。您可以做的是在托管页面的窗口底部创建一个按钮,然后从该按钮设置打开新窗口并在单击时关闭属性。 (如果你想关闭页面并打开一个新窗口)。

这就是我的意思

<Grid>
    <!--Your page frame -->
    <Frame Name="buildcaseFrame" NavigationUIVisibility="Hidden" />

    <!--This button will appear on all the pages-->
    <!--You can choose where to place the button-->
    <StackPanel VerticalAlignment="Bottom">
        <Button x:Name="btnCloseButton" ToolTip="Go Back to Main Menu Without Saving" Cursor="Hand" Content="Cancel" Click="closeButton_Click"/>
    </StackPanel>
</Grid>

这将允许您关闭页面并打开一个新窗口。就这样……

private void BtnCloseButton_Click(object sender, RoutedEventArgs e)
{
    Window1 win1 = new Window1();
    win1.Show();
    this.Close();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多