在WPF中,您可以ShowDialog在窗口上调用一次.之后就完成了.
对我来说似乎有些蹩脚,但这些都是规则.如果ShowDialog再次拨打电话,则会收到以下异常:
窗口关闭后无法设置可见性或调用Show,ShowDialog或WindowInteropHelper.EnsureHandle
我想知道的是:我怎样才能Window(或者UserControl真的)检查它是否已经ShowDialog调用(所以我知道new在ShowDialog再次呼叫之前要另外一个).
像这样的东西:
public void ShowListOfClients()
{
// | This is the method I want to write
// V
RefreshViewIfNeeded(_myWindowOrUserControlThatShowsAList);
FillWindowWithBusinessData(_myWindowOrUserControlThatShowsAList);
_myWindowOrUserControlThatShowsAList.ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)
注意:显然在上面的例子中,WindowOrUserControlThatShowsAList每次进入方法时都会更容易创建一个新的.但请更多地考虑这个愚蠢的例子.
这不是ShowDialog()独有的,Show()也是如此.不,没有IsDisposed属性可供检查.IsLoaded只是解决方案的一半,对于第一次调用也是错误的.
第一种方法是创建一个可以重新显示的对话框:
public bool CloseAllowed { get; set; }
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) {
if (!CloseAllowed) {
this.Visibility = System.Windows.Visibility.Hidden;
e.Cancel = true;
}
}
Run Code Online (Sandbox Code Playgroud)
下一个是明确跟踪对象引用的运行状况:
private Window1 win = new Window1(); // say
private void button1_Click(object sender, RoutedEventArgs e) {
if (win == null) {
win = new Window1();
win.Closing += delegate { win = null; };
}
win.ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12621 次 |
| 最近记录: |