首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果以编程方式关闭了所有者窗口,则WPF ShowDialog()不返回

在WPF中,ShowDialog()方法用于显示一个模态窗口,即用户必须在关闭该窗口之前完成交互操作。当以编程方式关闭所有者窗口时,ShowDialog()方法将不会返回。

模态窗口是一种阻塞式的窗口,它会阻止用户与应用程序的其他部分进行交互,直到该窗口被关闭。当调用ShowDialog()方法时,代码将等待模态窗口关闭后才会继续执行下一行代码。

如果以编程方式关闭了所有者窗口,即调用了所有者窗口的Close()方法或者设置了所有者窗口的DialogResult属性,那么ShowDialog()方法将不会返回。这是因为所有者窗口的关闭会导致模态窗口的关闭,从而结束了ShowDialog()方法的阻塞状态。

在这种情况下,可以通过判断ShowDialog()方法的返回值来确定窗口是否被关闭。如果返回值为true,则表示窗口正常关闭;如果返回值为false,则表示窗口是以编程方式关闭的。

以下是一个示例代码,演示了以编程方式关闭所有者窗口时ShowDialog()方法的行为:

代码语言:txt
复制
// 创建一个模态窗口
var dialog = new MyDialog();
// 设置所有者窗口
dialog.Owner = this;

// 显示模态窗口
bool? result = dialog.ShowDialog();

// 判断窗口是否正常关闭
if (result == true)
{
    // 窗口正常关闭
    // 执行相应的逻辑
}
else if (result == false)
{
    // 窗口是以编程方式关闭的
    // 执行相应的逻辑
}

在上述示例中,如果以编程方式关闭了所有者窗口,则result的值将为false,可以根据这个值来处理相应的逻辑。

腾讯云相关产品和产品介绍链接地址:

请注意,以上仅为腾讯云的一些相关产品,其他云计算品牌商也提供类似的产品和服务。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Prism 8.0 入门(下):Prism.Wpf 和 Prism.Unity

(); 如果类型未在 ViewModelLocationProvider 中注册,根据约定好的命名方式找到 ViewModel 的类型,这是默认的查找逻辑的源码...以往在 WPF 中需要弹出一个窗口,首先新建一个 Window,然后调用 ShowDialogShowDialog 阻塞当前线程,直到弹出的 Window 关闭,这时候还可以拿到一个返回值,具体代码差不多是这样...下面代码展示一个基本的 ShowDialog 函数调用方式: var parameters = new DialogParameters { { "UserName", "Admin" } }...如果讨厌 Prism.Wpf 的臃肿,或者需要创建面向多个 UI 平台的项目,也可以只使用轻量的 Prism.Core。...如果已经厌倦 Prism,可以试试即将发布的 MVVM Toolkit,它基本就是个 MVVM Light 的性能加强版,而且也更时髦。 8.

5.5K20

深入了解 WPF Dispatcher 的工作原理(PushFrame 部分)

如果说上一篇文章 深入了解 WPF Dispatcher 的工作原理(Invoke/InvokeAsync 部分) 中的 Invoke 算是偏冷门的写法,那 ShowDialog 总该写过吧?...有没有好奇过为什么写 ShowDialog 的地方可以等新开的窗口返回之后继续执行呢?...好了,现在我们知道一个阻塞等待的开关: 调用 Dispatcher.PushFrame(frame); 来阻塞地等待; 设置 frame.Continue = false 来结束等待,继续执行代码...看到这段代码是不是很明确如果设置为 false,退出循环,于是 PushFrame 方法返回,同时 _frameDepth 字段减 1。...---- 调试源码研究 PushFrame 阻塞等待的原理 为了开始调试,我为主窗口添加了触摸按下的事件处理函数: private void OnStylusDown(object sender,

1.8K20
  • 什么是模态窗口?本文带你了解模态窗口的本质

    做 Windows 桌面应用开发的小伙伴们对“模态窗口”(Modal Dialog)一定陌生。...Windows 系统设置因为让背景变暗,所以用户肯定会看得到需要进行的交互;而任务管理器没有让主界面变暗,所以用户在操作子界面的时候,模态窗口的边框和标题栏闪烁提醒用户注意。...新开一个消息循环阻塞当前代码的同时继续响应 UI 交互 上面 Window.ShowDialog 的本质也是在调用 Dispatcher.PushFrame,详见: 直击本质:WPF 框架是如何实现模态窗口的...进行 UI 强提醒 由于我们一开始禁用了主窗口,所以如果用户试图操作主窗口是不会有效果的。然而如果用户不知道当前显示一个模态窗口需要操作,那么给出提醒也是必要的。...详见:WPF window 子窗口反馈效果(抖动/阴影渐变) - 唐宋元明清2188 - 博客园 通常你不需要手工处理这些消息,但是如果你完全定制窗口样式,则可能需要自行做一个这样的模态窗口提醒效果。

    1.3K30

    【愚公系列】2023年11月 WPF控件专题 PrintDialog控件详解

    自定义控件允许开发人员使用XAML和C#等编程语言来创建个性化的用户界面元素。自定义控件可以根据需求提供更多的功能和自定义化选项,以及更好的用户体验。...在WPF应用程序中使用PrintDialog控件非常简单,只需要在需要进行打印操作的地方创建一个PrintDialog实例,并调用它的ShowDialog方法即可:PrintDialog printDialog...printDialog.PrintQueue; // 使用打印参数打印文档 // ...}需要注意的是,PrintDialog控件是一个模态对话框,即当它弹出时,用户不能操作应用程序中的其他部分,直到对话框被关闭为止...另外,该控件提供一些常用的打印设置,但如果需要更精细的控制,可以使用PrintTicket和PrintQueue对象自己进行参数的设置。...在实现打印预览功能时,可以使用PrintDialog控件来设置打印机和打印选项,并将预览结果显示在预览窗口中。

    57311

    WPF 使用 Pandoc 把 Markdown 转 Docx 选择文件获取文件的文件夹使用资源管理器打开文件夹选择指定文件

    界面很简单,就不告诉大家如何做出这样的界面,现在是来解决一些坑 选择文件 从软件界面看到,可以让用户选择需要转换的文件,选择文件可以通过 OpenFileDialog 让用户选择文件...(this) is true) { // pick.FileName 是选择的文件 } 这里 ShowDialog 传入的窗口是当前的窗口.../PandocMarkdown2Docx 如果发现代码里面存在任何你觉得需要修改的,请在 github 上新建讨论 ---- 本文会经常更新,请阅读原文: https://lindexi.gitee.io...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://lindexi.gitee.io ),不得用于商业目的,基于本文修改后的作品务必相同的许可发布。

    1.2K20

    【愚公系列】2023年11月 WPF控件专题 OpenFileDialog控件详解

    自定义控件允许开发人员使用XAML和C#等编程语言来创建个性化的用户界面元素。自定义控件可以根据需求提供更多的功能和自定义化选项,以及更好的用户体验。....*"; if (openFileDialog.ShowDialog() == true) //用户选择一个文件 { string fileName = openFileDialog.FileName...其中,Filter属性指定可以选择的文件类型。如果用户选择一个文件,我们可以通过FileName属性获取到该文件的完整路径。....*"; if (openFileDialog.ShowDialog() == true) { //读取文件路径并将其显示在文本框中 string filePath...注意,在使用OpenFileDialog时,我们需要将ShowDialog()方法的返回值与true进行比较,确保用户已选定文件。

    63511

    C#学习笔记——show()与showDialog()的区别

    方法 实际上是把窗体的Visible属性赋值为false,隐藏窗体 这样隐藏的窗体是可以重新显示,而不用创建该对话框的新实例 因为未关闭窗体,所以在应用程序不再需要该窗体时,请调用该窗体的Dispose...利用Form.Modal属性,如果该窗体是模式显示,则为true,否则为false 根据通过Show和ShowDialog而显示出来的窗体的Modal属性分别对应false和true 特别注意:...由于在窗体创建之前是无法得知显示方式的,所以在窗体构造函数中,Modal属性总是对应false,所以我们只能在Load事件中或者之后利用Modal属性值 怎么确定窗体间的所有者关系?...Form类的Owner属性:窗体的所有者 当一个窗体归另一窗体所有时,它便随着所有者窗体最小化和关闭。...例如,如果Form2归窗体Form1所有,关闭或最小化Form1时,Form2也会关闭或最小化。

    2K41

    WPF 使用 Pandoc 把 Markdown 转 Docx

    ,有一个界面可以快速做转换 界面很简单,就不告诉大家如何做出这样的界面,现在是来解决一些坑 选择文件 从软件界面看到,可以让用户选择需要转换的文件,选择文件可以通过 OpenFileDialog 让用户选择文件...(this) is true) { // pick.FileName 是选择的文件 } 这里 ShowDialog 传入的窗口是当前的窗口...安装 定义 ViewModel 类,这个类只有三个属性 public string Markdown { get => _markdown;...explorer.exe", argument); 我将软件放在 csdn 和 github 可以通过点击下面的网站下载 使用 Pandoc 把 Markdown 转 Docx-CSDN下载 软件使用方式.../PandocMarkdown2Docx 如果发现代码里面存在任何你觉得需要修改的,请在 github 上新建讨论

    56320

    【愚公系列】2023年11月 WPF控件专题 SaveFileDialog控件详解

    欢迎 点赞✍评论⭐收藏前言WPF控件是Windows Presentation Foundation(WPF)中的基本用户界面元素。它们是可视化对象,可以用来创建各种用户界面。...WPF控件可以分为两类:原生控件和自定义控件。原生控件是由Microsoft提供的内置控件,如Button、TextBox、Label、ComboBox等。这些控件都是WPF中常见的标准用户界面元素。...自定义控件允许开发人员使用XAML和C#等编程语言来创建个性化的用户界面元素。自定义控件可以根据需求提供更多的功能和自定义化选项,以及更好的用户体验。...如果用户点击保存按钮,则会返回true,然后可以使用FileName属性来获取用户选择的文件名。最后,可以使用File.WriteAllText()方法来将数据写入文件中。...1.属性介绍SaveFileDialog是WPF中的一个控件,用于在用户保存文件时显示一个对话框。

    57312

    深入了解 WPF Dispatcher 的工作原理(InvokeInvokeAsync 部分)

    ,就是一模一样!你总不能说参数名称不同也要算吧……甚至……返回值类型也是一样的。 既然这样,我们总算是明白微软到底在做些什么。...为什么凭空出现一个可以用来发送消息的窗口?于是,在 Dispatcher 构造函数中发现这个窗口。...如果你这么认为,你一定忽略一个很重要的问题——死锁! 如果是另一个线程调用到此线程的 Invoke,那么同步等待一下当然不会有问题。但是如果调用线程就是此线程本身呢?...而微软为这套实现方式做了两条路径: 如果是 10 的最高优先级,直接调用 Invoke 里传入的任务; 如果是其他,调用 DispatcherOperation 的 Wait 方法进行等待。...这样保证阻塞线程的情况下进行“等待”。至于如何做到“阻塞地等待”,请参阅本系列的第二篇文章 深入了解 WPF Dispatcher 的工作原理(PushFrame 部分)。

    3.7K21

    【愚公系列】2023年10月 WPF控件专题 DataGrid控件详解

    欢迎 点赞✍评论⭐收藏前言WPF控件是Windows Presentation Foundation(WPF)中的基本用户界面元素。它们是可视化对象,可以用来创建各种用户界面。...自定义控件允许开发人员使用XAML和C#等编程语言来创建个性化的用户界面元素。自定义控件可以根据需求提供更多的功能和自定义化选项,以及更好的用户体验。...数据编辑:DataGrid控件可以支持数据的编辑,包括单元格编辑、行编辑和列编辑等方式,方便用户对数据进行修改和更新。...//colDept.SelectedValuePath = "DeptId"; //colDept.ItemsSource = GetDepts(); //如果没有设置列的...在StudentDialogViewModel中,我们还定义两个RelayCommand,分别绑定OK和Cancel按钮的点击事件,并在Close方法中关闭窗口返回结果。

    1.2K00

    1-3 Winform 中的常用控件(3

    因此我们可以认为,每个由show方法打开的窗口的顺序是非固定的,如果遇到什么问题,由show方法打开的窗口的顺序可能会有很大的改变。...如果业务操作流程一但出现问题,窗口的顺序也有可能被再次打乱,很不顺手。...我们可以将show方法转化为showDialog()方法,顾名思义,showDialog()是一个进行路经绑定的show方法,它是不可以自由切换的,换言之,就是当你没有关闭你当前页的前提下,你是无法关闭该页面后面的任一页面的...showDialog()是模式窗体,与show方法的主要区别在于showDialog()打开的窗体,要等当前窗体关闭后才能操作其他窗体,而show()方法则不受此限制。...Form2实例化为f2             this.Visible = false;//将当前窗口设置为不可视;如果这样处理则系统报错。

    2.4K10

    【C#】分享一个弹出容器层,像右键菜单那样召即来挥

    新增的DrawSizeGrip方法就是绘制方法,是protected virtual的,所以如果你看不上我画的这个,可以在子类重写该方法画你自己满意的(题外,画这个我还参考VS2010的效果,不过是相反的...但很快发现一个在我看来还挺在意的不足,就是ToolStripDropDown只有Show,没有ShowDialog,就是不能以模式化(Modal,也有叫模态的,鉴于MSDN都称模式,我也随流叫它模式)的方式弹出...,而后者完全是.net实现,更多信息请参考MSDN,此处展开),因为ContextMenu的Show是阻塞式的,正合我意。...为什么要这样是因为要做到完全像右键菜单那样对全局鼠标敏感,需要全局钩子,这会增加代码量(性能且不说,没测过妄言),而且我认为没必要全局敏感 浮动层消失是调用Hide方法,所以对于模式化打开的浮动层,会返回...在此也提醒一下调用者,在使用模式对话框时,永远考虑有返回Cancel这种情况,不限于本例,而是所有对话框 原Show()/Show(IWin32Window)和ShowDialog()/ShowDialog

    2.8K20

    【我们一起写框架】MVVM的WPF框架之序篇(一)

    先定义这五个元素,如果后期需要,我们再进行补充。定义元素后,我们创建对应的应用程序集。项目结构如下: ?...我们建立约定如下: WPF项目窗体Window作为前缀名创建,如WindowMain,WindowLogin。 WPF项目页面Page作为前缀名创建,如PageMain,PageXXX。...WPF项目控件(UserControl)UC作为前缀名创建,如UCTable,UCXXX。 WPF的窗体、页面、控件有且只有一个ViewModel。...这样运行WPF就会启动我们的WindowMain窗体。 ViewModel创建窗体 主窗体已经运行了,如果我们想运行其他窗体,该怎么做呢?...本篇文章就先介绍Command,敬请期待下一篇文章,让我们一起继续完善我们的框架。 框架代码已经传到Github上了,并且会持续更新。

    2.1K30

    C#学习笔记—— 常用控件说明及其属性、事件

    如果当前未选定任何文本,给该属性赋值将把所赋的文本插入到插入点处。如果选定文本,给该属性所赋的文本值将替换掉选定文本。...1、常用属性 - 9 – 的 (1)DialogResult属性:当使用ShowDialog方法显示窗体时,可以使用该属性设置当用户按该按钮后,ShowDialog方法的返回值。...如果找到返回该项从零开始的索引;如果找不到匹配项,返回ListBox.NoMatches。....ShowDialog(); 通用对话框运行时,如果单击对话框中的【确定】按钮,返回值为 DialogResult.OK;否则返回值为DialogResult.Cancel。...(1)ActiveMdiChild属性:该属性用来表示当前活动的MDI子窗口如果当前没有子窗口返回null。

    9.7K20

    WPF 开启Pointer消息存在的坑

    1 的方式告诉系统不显示触摸反馈点。...也就是 WPF 隐藏触摸反馈点是通过 How do I disable the press-and-hold gesture for my window 的方法 如果设置 Stylus.IsPressAndHoldEnabled...TABLET_TOUCHUI_FORCEOFF = 0x00000200; private const uint TABLET_FLICKS_DISABLED = 0x00010000; 但如果开启...Issue #3379 · dotnet/wpf 但预计不会在 WPF 中修复,原因是这是 Windows 的 WM_Pointer 机制的坑,和 WPF 其实没有关系 另一个解决方法是在关闭系统全局触摸反馈点...表现是如当前触摸被某个获取焦点的窗口捕获,此时触摸点到一个后台的窗口,未激活的窗口上,那此窗口依然可以收到触摸消息,无论这个窗口是在哪个进程上,只需要此窗口所在的进程开启 Pointer 消息即可 而原先的交互是如果触摸被某个前台窗口捕获

    83130
    领券