WPF通过附加属性控制窗口关闭

场景1

当使用 ShowDialog() 方式显示窗口时,通过定义附加属性的方式可实现在 ViewModel 中进行数据绑定(bool?)来控制子窗口的显示和关闭

public class ExWindow
{
    public static bool? GetDialogResult(DependencyObject obj)
    {
        return (bool?)obj.GetValue(DialogResultProperty);
    }

    public static void SetDialogResult(DependencyObject obj, bool value)
    {
        obj.SetValue(DialogResultProperty, value);
    }

    // Using a DependencyProperty as the backing store for DialogResult.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty DialogResultProperty =
        DependencyProperty.RegisterAttached("DialogResult", typeof(bool?), typeof(ExWindow), new PropertyMetadata(true, (d, e) =>
        {
            var handler = d as Window;
            handler.DialogResult = e.NewValue as bool?;
        }));
}

场景2

当主窗口的显示和关闭也想通过在 ViewModel 中来进行控制的话可以通过事件和消息级制来实现,具体可参考 MVVM Light 中的 Messenger 使用方式

原文地址:https://www.cnblogs.com/hippieZhou/p/9898258.html

时间: 2024-11-13 08:08:27

WPF通过附加属性控制窗口关闭的相关文章

DotNetBar怎样控制窗口样式

DotNetBar怎样控制窗口样式 老帅  在C#中使用控件DevComponents.DotNetBar时,怎样创建一个美丽的窗口.并控制窗口样式呢? 1.新建一个DotNetBar窗口 2.使OFFICE窗口风格生效   假设执行时还是默认窗口风格,而不是offfice风格,可禁用系统的Glass主题就可以. 例如以下代码: this.EnableGlass = false; 3.禁止关闭窗口    private void FormTest_FormClosing(object sende

【.net 深呼吸】WPF 中的父子窗口

与 WinForm 不同,WPF 并没有 MDI 窗口,但 WPF 的窗口之间是可以存在“父子”关系的. 我们会发现,Window 类公开了一个属性叫 Owner,这个属性是可读可写的,从名字上我们也能猜到,应该是用来设置窗口的父子关系的.这个属性看起来不难用,只要赋个窗口实例即可,而真正的难点是你得搞清楚“谁是谁的父窗口”,“谁是谁的子窗口”,一旦你搞混了,有可能会应用程序带来一些小麻烦. 这个问题是一位妹子问我的,不然怎么说女孩子特别细心呢,这个小玩意儿估计很多时候我们都不会注意到. 下面,

WPF Adorner+附加属性 实现控件友好提示

标题太空泛,直接上图 无论是在验证啊,还是提示方面等一些右上角的角标之类的效果,我们会怎么做? 这里介绍一种稍微简单一些的方法,利用附加属性和Adorner来完成. 例如WPF自带的控件上要加这样的效果,首先继承自原控件然后重写是可以的,但是控件类型太多,重写不过来.这个时候我们唯一能添加的只有附加属性了. 利用附加属性的属性变更事件PropertyChangedCallBack,我们可以获取到宿主对象即Button,然后就可以往Button上加入我们自定义的Adorner了.再添加一个附加属性

wpf C# 操作DirectUI窗口 SendMessage+MSAA

原文:wpf C# 操作DirectUI窗口 SendMessage+MSAA 最近做一个抓取qq用户资料的工具,需要获取qq窗口上的消息,以前这种任务是用句柄获取窗口中的信息,现在qq的窗口用的是DirectUI,只有窗口句柄,没有控件句柄,句柄这条路走不通了.不过较新版的qq的部分控件实现了微软的IAccessible接口(称为Microsoft Active Accessibility技术,简称MSAA),可以用另一套函数获取qq窗口的信息.不过要对窗口进行输入还是要靠句柄,上面说过,Di

自己收藏-javascript用window.open的子窗口关闭自己并且刷新父窗口

function closeMeAndReloadParent() { opener.location.reload(); window.close(); } 一种在父窗口中得知window.open()出的子窗口关闭事件的方法 <HTML><BODY><P> </P><form name=fm_Info><input type=text name=txtValue></form><script language=j

分享到微博代码,添加分享窗口关闭回调

<html><head> <title> 分享到微博代码,添加窗口关闭回调 </title></head><body><div id="click">分享到微博</div><script> var shareWindow;//分享窗口 document.getElementById("click").onclick = function () { var ur

C# WPF 让你的窗口始终钉在桌面上

原文:C# WPF 让你的窗口始终钉在桌面上 IntPtr hWnd = new WindowInteropHelper(Application.Current.MainWindow).Handle; IntPtr hWndProgMan = FindWindow("Progman", "Program Manager"); SetParent(hWnd, hWndProgMan); [DllImport("user32.dll", SetLas

js父窗口关闭时,子窗口随之关闭

最近,遇到一个权限管理的系统.由于权限管理的系统和本来的系统风格不一致,所有新打开一个窗口.问题就来了,admin注销之后,权限管理的窗口没有关闭.其他普通用户登录以后,仍然可以操作权限管理的窗口. 问题简化:admin注销的时候,或者main.html关闭的时候,打开的所有新窗口一起关闭.问题就解决了 直接看代码吧: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w

DEV中dx:ASPxPopupControl 控件的使用(在窗口关闭或隐藏时,清楚文本框中的内容)

//在窗口关闭或隐藏时,清楚文本框中的内容(核心代码) function(s, e) { ASPxClientEdit.ClearGroup('entryGroup'); } <asp:Content ID="Content1" ContentPlaceHolderID="ContentHolder" runat="Server"> <script type="text/javascript"> //