单击按钮打开窗口时,父窗口冻结。如果我再次最小化和最大化父窗口,它再次正常工作。
系统配置
以下是我可以重现此问题的简单应用程序。
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>
答案 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了解详细信息。