Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF表单应调整大小以显示其内容_C#_Wpf_Wpf Controls - Fatal编程技术网

C# WPF表单应调整大小以显示其内容

C# WPF表单应调整大小以显示其内容,c#,wpf,wpf-controls,C#,Wpf,Wpf Controls,当WPF窗口第一次出现时,其内容似乎已冻结。要刷新内容,我需要调整表单大小,然后它将被修复。或者我点击标签,然后找到一个列表框——它不可见——然后点击它和viola!表单再次更新其内容 你觉得怎么样?奇怪吧?提前谢谢 编辑: 调整窗口大小将迫使内部构件失效并重新绘制。您可以尝试在加载表单时使其无效,以强制其执行相同的操作: private void Window_Loaded(object sender, RoutedEventArgs e) { this.Show(); thi

当WPF窗口第一次出现时,其内容似乎已冻结。要刷新内容,我需要调整表单大小,然后它将被修复。或者我点击标签,然后找到一个列表框——它不可见——然后点击它和viola!表单再次更新其内容

你觉得怎么样?奇怪吧?提前谢谢

编辑:


调整窗口大小将迫使内部构件失效并重新绘制。您可以尝试在加载表单时使其无效,以强制其执行相同的操作:

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

   this.Invalidate();

   while (!AppMain.needClose)
   {
      System.Windows.Forms.Application.DoEvents();
      DoThings();
   }
}
除非您正在执行某种自定义消息泵送,否则标准表单消息泵应该在循环时为您执行该操作。您可能会发现,因为您正在拦截窗口加载的事件,所以您正在停止完成初始化


根据我的经验,调用DoEvents是一种糟糕的代码气味。如果你需要周期性地做一些事情,最好从某种定时器触发它

当你的窗口被加载时,它已经显示出来了,你为什么再次调用这个.show()。

我刚刚从windows窗体移植到WPF。我删除了该行。Invalidate()在WPF中无效。请尝试从加载的
窗口中删除所有代码。什么是
DoThings()做什么?我删除了循环部分,现在没有问题了。最好的方法是什么?我应该使用一次性计时器吗?这在很大程度上取决于你试图触发什么?
private void Window_Loaded(object sender, RoutedEventArgs e)
{
   this.Show();

   this.Invalidate();

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