WPF中使窗体关闭按钮与自定义的退出按钮行为一致的做法

25 篇文章 8 订阅

在开发中,我们经常需要窗体的关闭按钮(右上角的叉叉)与我们的自定义退出按钮具有相同的执行行为。这时我们可以按照本文所说的方法来实现。

 

问题描述:

建立WPF窗体应用程序,运行程序后,界面如下所示。

 

在界面上修改示例数据,当示例数据发生变更(不再为“0”时即发生变更)时,点击“退出”按钮 ,必须弹出“是否保存”的提示框(如下图所示)。

 

点击“是”,保存并退出。

点击“否”,不保存直接退出。

点击“取消”,回到画面不退出。

 

要实现上面这点,很简单,在退出按钮的Click事件中增加相应的控制代码即可以实现(代码如下所示)。

private void Button_Close_Click(object sender, RoutedEventArgs e)
{
    if (!this.TextBox_ExpData.Text.Equals("0"))
    {
        MessageBoxResult result = MessageBox.Show("数据有变更,是否保存数据变更?", "WPF实害例", MessageBoxButton.YesNoCancel, MessageBoxImage.Question);
        if (result == MessageBoxResult.Yes)
        {
             MessageBox.Show("数据被保存!");
             Application.Current.MainWindow.Close();
        }
        else if (result == MessageBoxResult.No)
        {
             Application.Current.MainWindow.Close();
        }
        else
        {
             return;
        }
    }
}

而我们这里需要实现的是:点击窗口右上角的叉叉时,也能弹出“保存变更”的提示框。但是默认情况下,点击叉叉是不作任何操作直接关闭窗体的。我们可以按照下面的做法来实现。

首先给窗体的Closing事件指定相应的方法,该方法实现“保存变更提示”的功能。

给窗体的Closing事件指定方法可以直接在代码中实现:

<Window x:Class="CloseWindowExp.MainWindow"        
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="171" Width="415"
        ResizeMode="NoResize"
        Closing="MainWindow_Closing">

也可以在窗体的属性窗口中实现:

接下来,实现方法MainWindow_Closing。

private void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    if (!this.TextBox_ExpData.Text.Equals("0"))
    {
        MessageBoxResult result = MessageBox.Show("数据有变更,?是否保存数据变更?", "WPF实害例", MessageBoxButton.YesNoCancel, MessageBoxImage.Question);
        if (result == MessageBoxResult.Yes)
        {
             MessageBox.Show("数据被保存。");
             e.Cancel = false;
        }
        else if (result == MessageBoxResult.No)
        {
             e.Cancel = false;
        }
        else
        {
             e.Cancel = true;
        }
     }
     else
     {
          e.Cancel = false;
     }     
}

这样一来,点击叉叉便可以和点击退出按钮具有一样的行为了。

最后得修改一下Button_Close_Click方法。

private void Button_Close_Click(object sender, RoutedEventArgs e)
{
     Application.Current.MainWindow.Close();
}

好了,就这样了。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值