あなたは可能性がポップアップではなく、ウィンドウの巣あなたのチャートをし、このようにそれを起動
<Button x:Name="button" Click="button_Click"/>
<Popup x:Name="popup" StaysOpen="true">
<TextBlock Text="Clicked"/>
</Popup>
private void button_Click(object sender, RoutedEventArgs e)
{
if (!popup.IsOpen) popup.IsOpen = true; // Open it if it's not open
else popup.IsOpen = false; // Close it if it's open
}
このarticleは、あなたのオプションの多くを説明しています。
また、articleのように別のUIスレッドでWindowsを起動してみることもできます。このようなもの
<Button x:Name="button" Click="button_Click"/>
private void button_click(object sender, RoutedEventArgs e)
{
Thread thread = new Thread(() =>
{
MyWindow w = new MyWindow();
w.Show();
w.Closed += (sender2, e2) =>
w.Dispatcher.InvokeShutdown();
System.Windows.Threading.Dispatcher.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
ポップアップアプローチの利点は、はるかに簡単です。複数のUIスレッドアプローチの利点の1つは、ポップアップではなく完全に機能する第2のウィンドウを持つことができることです。
両方の方法の問題は、メインウィンドウを移動すると、2つ目のウィンドウが移動しないことです。これは、少なくとも2番目のウィンドウのアプローチでは、2番目のウィンドウがポップアップのアプローチよりも最初のウィンドウから独立していることが明確になります。この問題を解決するには、questionのadornerを使用するか、メインウィンドウの一部を「追加情報」として設定し、可視性を変更してグラフのようなものを表示/非表示にすることができます。
彼は2番目のウィンドウにグラフを表示したいので、 'MessageBox'でそれを行うことはできません。 – Gareth
メッセージボックスを例として使用していましたが、完全なソリューションを提供していませんでした。 – stuicidle
他のスレッドで 'show'メソッドを呼び出しているだけなので、これはどれくらい便利なのでしょうか。さらに、これは 'messagebox'に関するもので、opの質問とは関係ありません。 明確にするために、私はこれを試していませんが、WPFはメイン 'UIスレッド'を採用しているため、この結果は実際には得られないオーバーヘッドになります。 私はこれがクロススレッドアクセスを試みるためにランタイムエラーを引き起こす可能性があると考えています –