当WPF窗口第一次出现时,其内容似乎已冻结。要刷新内容我需要调整表单大小,然后它将被修复。或者我点击TAB然后找到一个列表框 - 它不可见 - 然后点击它和中提琴!表单再次更新其内容。
你怎么看?怪啊?提前谢谢!
编辑:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.Show();
while (!AppMain.needClose)
{
System.Windows.Forms.Application.DoEvents();
DoThings();
}
}
答案 0 :(得分:1)
调整窗口大小会强制内部构件无效并重新绘制。您可以尝试在加载表单时使表单无效,以强制它执行相同的操作:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.Show();
this.Invalidate();
while (!AppMain.needClose)
{
System.Windows.Forms.Application.DoEvents();
DoThings();
}
}
除非您正在进行某种自定义消息,但标准格式消息泵应该在为您循环时执行此操作。您可能会发现,因为您正在拦截加载窗口的事件,所以您将停止完成初始化。
根据我的经验,调用DoEvents是一种糟糕的代码味道。如果您需要定期执行某些操作,最好从某种计时器触发它。
答案 1 :(得分:1)
当你的窗口加载时它已经显示,为什么你再次调用this.show()?