阅读 73

WPF 的 Window 样式控件模板如何实现关闭后弹窗提示

WPF 使用中,通过自定义 Window 样式绑定,实现统一的界面风格,像自定义无边框窗体。如果有这样的场景,用户点击窗体上的x试图关闭窗体,在某种情况下,如数据未保存,想要弹一个 MessageBox 来提示用户是否确定关闭。这样如何实现呢?

下面是我想的一种实现方式,在窗体 XMAL 代码中定义一个 bool 静态资源,关闭时间的后台代码通过判断它来执行,同时窗体的 behindCode 也可以更改它

Style 样式中的 ControlTemplate 的一个 x 关闭按钮用来关闭窗体:

Window 的这个 Style 样式关闭按钮 Click 绑定了后台事件代码:

// 关闭
private void CustomWindowBtnClose_Click(object sender, RoutedEventArgs e)
{
    Window win = (Window)((FrameworkElement)sender).TemplatedParent;

    if (win.TryFindResource("CanClose") == null)
    {
        win.Close();
        return;
    }

    if (!(bool)win.FindResource("CanClose"))
    {
        string msg = (string)win.TryFindResource("Message");

        if (msg == null)
        {
            return;
        }

        if (HMessageBoxLib.HMessageBox.Show(msg, "提示", HMessageBoxLib.HMessageBoxButtons.YesNo) != HMessageBoxLib.HMessageboxResult.Yes)
        {
            return;
        }

        win.Close();

        if (win.Owner != null)
            win.Owner.Activate();

        return;
    }

    win.Close();

    if (win.Owner != null)
        win.Owner.Activate();
}

窗体的 XMAL 静态资源:


    True
    未保存,是否确定退出?

效果是这样的:

点击右上的 x 关闭,会有弹窗:

在知道资源位置的情况下,窗体后台代码可以直接通过键索引的这样的方式更改资源的值,这样可以在关闭窗口之前,更改 Resources["CanClose"] 根据情况是否要弹窗判断:

Resources["CanClose"] = true;
Resources["Message"] = "确定关闭吗?";

这的CanClosetrue时,可以直接关闭窗口,不需要弹窗提醒;相反为false时则不能直接关闭窗体,需要弹窗提醒。

原文:https://www.cnblogs.com/huvjie/p/15104816.html

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐