wpf - 窗口冻结

时间:2012-12-29 11:05:59

标签: wpf xaml window

单击按钮打开窗口时,父窗口冻结。如果我再次最小化和最大化父窗口,它再次正常工作。

系统配置

  • Windows 7,64位操作系统。
  • .Net framework 3.5 SP1
  • Visual studio express 2008

以下是我可以重现此问题的简单应用程序。

Window1.xaml

<Window x:Class="WpfApplication1.Window1"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="Window1" Height="300" Width="300">
  <StackPanel>
    <TextBox Width="200"/>
    <Button Content="click" Click="Button_Click"/>
  </StackPanel>
</Window>

Window1.xaml.cs

namespace WpfApplication1 {
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window {
    public Window1() {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e) {
        (new Window2()).ShowDialog();
    }
}
}

Window2.xaml

<Window x:Class="WpfApplication1.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window2" Height="300" Width="300" WindowStyle="ToolWindow">
<Grid>

</Grid>
</Window>

如果我删除 WindowStyle =“ToolWindow” !!!!!!

的App.xaml

<Application x:Class="WpfApplication1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="Window1.xaml">
<Application.Resources>

</Application.Resources>
</Application>

4 个答案:

答案 0 :(得分:1)

ShowDialog()的调用阻止了您的GUI线程。

有关不阻止主线程的替代方法,请参阅this question

答案 1 :(得分:1)

使用Show代替ShowDialog,以模态模式打开一个窗口

答案 2 :(得分:1)

如果您使用ShowDialog(),请尝试将Window1设置为Window2的所有者:

        Window2 w = new Window2 { Owner = this };
        w.ShowDialog();

答案 3 :(得分:1)

显示而非显示对话框将起作用,但也许您的意图更像是一个子窗口,请参阅http://wpftoolkit.codeplex.com/wikipage?title=ChildWindow&referringTitle=Home了解详细信息。