0

ボタンをクリックしてウィンドウを開くと、親ウィンドウがフリーズします。親ウィンドウを再度最小化して最大化すると、再び正常に機能します。

システム構成

  • Windows 7、64 ビット OS。
  • .Net フレームワーク 3.5 SP1
  • ビジュアルスタジオエクスプレス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

4 に答える 4

1

[表示]ダイアログの代わりに[表示]は機能しますが、子ウィンドウのようなものを意図している可能性があります。詳細については、 http: //wpftoolkit.codeplex.com/wikipage?title = ChildWindow&referringTitle=Homeを参照してください。

于 2012-12-29T11:27:45.003 に答える
1

への呼び出しがShowDialog()GUI スレッドをブロックしています。

メインスレッドをブロックしない代替アプローチについては、この質問を参照してください。

于 2012-12-29T11:10:19.143 に答える
1

モーダル モードでウィンドウを開くShow代わりに使用します。ShowDialog

于 2012-12-29T11:11:00.173 に答える
1

ShowDialog() を使用する場合は、Window1 を Window2 の所有者として設定してみてください。

        Window2 w = new Window2 { Owner = this };
        w.ShowDialog();
于 2012-12-29T11:18:35.770 に答える