ChildWindow是一个模式窗口,但它不会阻塞。有没有办法让它阻塞?我基本上想要一个ShowDialog()方法,它将调用ChildWindow.Show(),但直到用户关闭ChildWindow时才返回。我尝试在ChildWindow.Show()之后使用Monitor.Enter()阻塞,但是ChildWindow没有呈现,浏览器就挂起了。有谁有什么想法吗?
发布于 2009-08-13 19:30:51
我不相信它支持这种行为。你可以在CodePlex上使用vote for it。根据您的需要,您可以使用look at some of Tim Heuer's workarounds here或使用不同的自定义控件,如Silverlight Modal Control (on CodePlex)。
发布于 2009-08-18 22:20:25
您无法在Silverlight中执行您正在尝试执行的操作。对UI所做的任何更改都将在UI线程上运行。如果阻塞UI线程,用户将无法与浏览器交互,因此用户无法执行任何操作来解除阻塞线程。
如果你真的想创建一个阻塞对话框窗口,唯一的方法就是使用非UI线程。例如,您可以创建一个类似以下内容的方法:
private void ShowModalDialog()
{
AutoResetEvent waitHandle = new AutoResetEvent(false);
Dispatcher.BeginInvoke(() =>
{
ChildWindow cw = new ChildWindow();
cw.Content = "Modal Dialog";
cw.Closed += (s, e) => waitHandle.Set();
cw.Show();
});
waitHandle.WaitOne();
}此方法将显示一个对话框窗口,并且在关闭对话框窗口之前不会返回。但此方法只能从non-UI-thread.调用从UI-thread调用它将导致死锁(因为UI-thread正在等待一个只能在UI-thread上触发的事件)。
或者,您应该考虑使您的逻辑异步,而不是强制它同步。
发布于 2010-09-27 17:40:51
如果您想对子窗口关闭执行某些操作,请使用以下代码。在调用前隐藏不需要的控件,并在子窗口关闭时显示,简单:)
ChildWindow cw = new ChildWindow();
cw.Closed += new EventHandler(cw_Closed);
cw.Show();https://stackoverflow.com/questions/1273614
复制相似问题