我在主窗口中有这个点击事件来打开一个新窗口
private void Button_Click(object sender, RoutedEventArgs e)
{
cm = new CanalesMain();
cm.Show();
cm.Canales.setValues();
}
Run Code Online (Sandbox Code Playgroud)
我的cm变量在我的主窗口中定义为成员类,因为我需要每5分钟加载/刷新一次setValues()方法(有一个TimeSpan和一个EventHandler)
问题是,在我的"刷新数据"方法中,我有这个if语句来询问cm变量是否已加载且不为空(我的意思是,如果窗口曾被打开或者如果打开,请询问是否未关闭)
if (cm!=null && cm.IsLoaded)
{
cm.Canales.setValues();
}
Run Code Online (Sandbox Code Playgroud)
这是询问我的窗户是否打开的正确或最佳方式吗?
Adr*_*tti 10
严格说不,这不是正确的方法.IsLoaded并不意味着它Window是可见的,只是加载(即使在大多数场景中这可能是等效的,但它意味着这个窗口已经创建过一次,它有一个句柄,没有提到它的可见性).
您必须检查的是Visibility属性(最后,Show()将更改),如果当前可见或者尚未加载(或者它已被加载但它仍然是,则它将是可见的Window)Hidden实际上隐藏了).
总结一下:
if (cm != null && cm.Visibility == Visibility.Visible)
{
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果Window是可见的,那么它是隐式的,它已被加载(它有一个句柄),但它不是真的反之亦然(加载的窗口可能不可见,也许它甚至不是在过去).