C# 只有在创建窗口并显示为对话框后,才能设置DialogResult
我有一个WPF主窗口mywindow.showDialog 单击窗口上的按钮时,将执行命令 假设该命令是SendToTableCommandC# 只有在创建窗口并显示为对话框后,才能设置DialogResult,c#,wpf,window,dialogresult,C#,Wpf,Window,Dialogresult,我有一个WPF主窗口mywindow.showDialog 单击窗口上的按钮时,将执行命令 假设该命令是SendToTableCommand protected virtual void SendToTableExecute(object o) { UIThread.BeginInvoke(new Action<object>(SendToTableExecuteUI),o); } private void SendToTableExecuteUI(object o) {
protected virtual void SendToTableExecute(object o)
{
UIThread.BeginInvoke(new Action<object>(SendToTableExecuteUI),o);
}
private void SendToTableExecuteUI(object o)
{
if (o is Control)
{
m_OwningWindow = UIHelper.FindVisualParent<Window>((Control)o);
}
do sth...
if (m_OwningWindow != null)
{
//only set DialogResult when window is ShowDialog before
if(System.Windows.Interop.ComponentDispatcher.IsThreadModal)
m_OwningWindow.DialogResult = true;
}
}
受保护的虚拟void SendToTableExecute(对象o)
{
BeginInvoke(新操作(SendToTableExecuteUI),o);
}
私有void SendToTableExecuteUI(对象o)
{
if(o为控制)
{
m_OwningWindow=UIHelper.findvisualpart((控制)o);
}
做某事。。。
如果(m_OwningWindow!=null)
{
//仅当窗口在之前显示Dialog时设置DialogResult
if(System.Windows.Interop.ComponentDispatcher.IsThreadModal)
m_OwningWindow.DialogResult=true;
}
}
不久前,m_OwningWindow.DialogResult=true
引发异常。所以我添加了一个使用IsThreadModal的if检查。它已经工作了一段时间,但现在m_owningWindow没有关闭,因为IsThreadModal为false
我不知道什么是解决问题的正确方法,我认为我没有妥善处理它。
请帮忙。提前感谢使用
表单.模式
确定表单是作为窗口还是模式对话框打开的
无论窗体是否为对话框,都应该能够在希望关闭窗体时关闭()窗体。(在某些情况下,您可能还需要在交割后进行处置)
此外,DialogResult是一个枚举类型-
true
不是我希望看到分配给它的值。通常是DialogResult.OK
或DialogResult.Yes
将用于此操作。Jason的回答让我想起了一个解决方法。i、 e.使用Window.Close(),然后在窗口上添加bool类型属性,例如OKClicked,将设置DialogResult的任何地方替换为Window.Close();window.OKClicked=true或false。将对window.DialogResult的引用替换为window.ok。
解决方法有问题吗?谢谢在分配
对话框结果
之前,我正在隐藏我的窗口。交换顺序,以便在隐藏窗口之前分配对话框结果
,修复了我的问题。即使窗口是ShowDialog
'd,也必须将其视为“打开”,以便设置DialogResult
编辑:窗口应该关闭,而不是隐藏。我发帖后,它咬了我一口。谢谢。这不是形式。这是WPF窗口,没有模式属性,我可以使用window.Close关闭它,但我想根据用户是否单击OK按钮或Cancel退出窗口来执行不同的操作。WPF窗口上的对话框结果是否为布尔?我主要关心的是在一个窗口之后引用一个窗口的属性是否安全。close()?System.Windows.Window上没有已释放的属性