2011-05-11 81 views
0

当WPF窗口第一次出现时,其内容似乎冻结。刷新内容我需要调整窗体大小,然后它将被修复。或者我打开TAB,然后找到一个列表框 - 它不可见 - 然后点击它和中提琴!表单再次更新其内容。WPF窗体应调整大小以显示其内容

您认为如何?怪怪的?提前致谢!

enter image description here

编辑:

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    this.Show(); 

    while (!AppMain.needClose) 
    { 
     System.Windows.Forms.Application.DoEvents(); 
     DoThings(); 
    } 
} 

回答

1

调整窗口将迫使内部无效并重新油漆。当它装逼它做同样的你可以尝试无效形式:

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    this.Show(); 

    this.Invalidate(); 

    while (!AppMain.needClose) 
    { 
     System.Windows.Forms.Application.DoEvents(); 
     DoThings(); 
    } 
} 

除非你正在做某种自定义消息抽水不过,标准的形式消息泵应该做的,而循环为您服务。您可能会发现,因为您正在拦截窗口加载的事件,所以您将停止初始化完成。

根据我的经验,调用DoEvents是一种不好的代码异味。如果您需要定期做某些事情,最好从某种计时器中触发它。

+0

Invalidate()在WPF中无效。 – 2011-05-11 14:51:24

+1

然后尝试从'window_loaded'方法中删除所有代码。 'DoThings();'做了什么? – 2011-05-11 14:57:45

+0

我删除了循环部分,现在没有问题。最好的方法是什么?我应该使用一次性计时器吗? – 2011-05-11 15:02:08

1

当加载你的窗口,它已经显示了,为什么你叫this.show()再次??

+0

我刚刚从Windows窗体移植到WPF。我删除了该行。 – 2011-05-11 14:50:53

相关问题