(初学WPF,对遇到的问题请求大佬解决后进行整理,理解上可能还是有些偏差,请各位批评指正)
WPF中显示和隐藏一个窗口,可以在自己的.xmal.cs中进行this.show()和this.hide()的调用,
但是在一个无关类中想要显示和隐藏(通过子线程去控制主线程),往往编译能过但是不能达到预期的效果
解决办法是使用委托事件和Invoke函数:
比如我在Impl.cs类中想要调用窗口的开合,首先新建一个委托:
public delegate void ShowHandler();
新建事件:
public static event ShowHandler MainWindowShowEvent;
在xxx.xaml.cs中注册:
可以添加到构造函数或者Loaded函数里面
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
Impl.MainWindowShowEvent += new Impl.ShowHandler(this.ShowMainWindow);
}
public void ShowMainWindow()
{
this.Dispatcher.Invoke(new Action(delegate { this.Show(); }));
}
调用:
MainWindowShowEvent();