2016-03-26 103 views
0

WPFアプリケーションのWindow1とWindow2に2つの異なるウィンドウがあるとします。WPFで2つのウィンドウを切り替える

Window1からのいくつかのアクションに基づいて、しばらくの間、Window2がポップアップし、Window1のいくつかのアクションに基づいて、Window2が閉じられ、Window2が表示される前の状態でWindow1に戻ります。

これは、Window1に存在するすべてのコントロールのすべてのコンテンツを意味します。

iは

にShowDialog()を使用スイッチングを達成するために、

Window2がオンのときにフリーズするためにWindow1が必要なため、正確に探していました。

今私の問題は、私はそれの内容でWindow1に戻ることができません。

メインウィンドウ(ウィンドウ1)

<Window x:Class="Test.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <Button Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Margin="193,130,0,0" Click="Button_Click"/> 
</Grid></Window> 

の.xaml Button_Click

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    Window1 window1 = new Window1(); 
    window1.ShowDialog(); 

    //Actions 

    window1.Close(); 
} 

とウィンドウ1のXAMLは、私は私以外は何も変更していない通常のものですmade the

のWindowStyle =なし

ので、私は、右上の終了ボタンで終了することはできませんあなたはこの使用できるMVVMを使用している場合

+0

あなたが言いましたように、「アクションに基づいて」Window2を閉じるだけです。 –

+0

@AlexBellご返信いただきありがとうございます。会うのは初めてではありません:)どうすればこのClose()は何もしません。 – Xexolas

+0

ウィンドウの右上のコントロールボックスに「閉じる」ボタンがあります。またwindow.Close()を呼び出すこともできます。メソッドを、そのWindows2内のいくつかのコントロールに関連付けられたイベントハンドラから取得します。より詳細な回答を得るには、問題に関連するコードスニペット全体を含めてください。よろしくお願いします。 –

答えて

2

public static class DialogCloser 
{ 
    public static readonly DependencyProperty DialogResultProperty = 
     DependencyProperty.RegisterAttached(
      "DialogResult", 
      typeof(bool?), 
      typeof(DialogCloser), 
      new PropertyMetadata(DialogResultChanged)); 

    private static void DialogResultChanged(
     DependencyObject d, 
     DependencyPropertyChangedEventArgs e) 
    { 
     var window = d as Window; 
     if (window != null) 
      window.DialogResult = e.NewValue as bool?; 
    } 
    public static void SetDialogResult(Window target, bool? value) 
    { 
     target.SetValue(DialogResultProperty, value); 
    } 
} 

そして、XAMLでの:

<Window x:Class="Window2" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/ 
    xmlns:xc="clr-namespace:Window2" 
    xc:DialogCloser.DialogResult="{Binding DialogResult}" 

次に、モデルでは、

public bool? DialogResult 
    { 
     get; 
     set; 
    } 
+0

MVVMを使用して、多くの問題の解決策を見つけました。 – Xexolas

1

ここでは、一般的に私のために働いていたものです:時々私は何度も繰り返しものをロードしたくないとき、私はMy.Windows.winNameを使用していますが、近くをキャンセルする必要があると

Dim TheAboutWindow As New winAbout 
TheAboutWindow.Owner = Me 
TheAboutWindow.ShowDialog() 
TheAboutWindow = Nothing 

何とかウィンドウを隠す。

しかし、My.Windows.winNameには素晴らしいことが1つあります。変数名を覚える必要はなく、開いているウィンドウには通常アクセスできます。 (ただし、2つのインスタンスが開いているときの動作はわかりません)。

つまり、My.Windows.winMain.Title = "OMG Jawj。できますか?"

My.Windows.winHost.Owner = Me 
My.Windows.winHost.ShowDialog() 

あなたは/あなたが子供から最小限の機能を実行したい場合は、所有者の行を省略し、通常の最大/に再び子供を示さなければならないことができます。

+0

http://converter.telerik.com/ –

2

答えは資格の推測に基づいているので、あなたの質問やビジネスロジックは、少し不明である:、ダイアログモードで二WPFウィンドウ(WINDOW2)を開き、次の汎用コードを使用するために:

Window2 _window2 = new Window2() 
{ 
    Title = "Modal Dialog Window", 
    Topmost = true, 
    ResizeMode = ResizeMode.NoResize, 
    ShowInTaskbar = false, 
    Owner = this 
}; 
_window2.ShowDialog(); 
ため、その二 window2を閉じる右上のコントロールボックスで標準の「閉じる」ボタンのいずれかを使用、またはその window2Buttonを追加し、そのボタン Clickイベントに this.Close()文を置くために

追加のコメントごとに編集:2番目のウィンドウをモーダルダイアログとして表示すると、オーナーウィンドウがブロックされます(たとえば、MessageBoxをポップするなど)。 2番目のウィンドウを開いてメインウィンドウから閉じなければならない理由は非常に不明なので、ビジネスロジックを明確にしてください。メインウィンドウのボタンクリックイベントで2番目のウィンドウを開いて閉じる間にどのような "アクション"を置くのですか? 2番目のウィンドウをノーマルモードで開くことを検討して、メインウィンドウから閉じることができます。たとえば、最初のウィンドウに配置されたButtonコントロールを使用します。ビジネスロジックを洗練しなければならないようです。

これが役に立ちます。

+0

これは実際に私が望むものですが、これには2つの問題があります最初の1つは、Window2スタイルはnoneなので、右上のコントロールボックスには閉じるボタンはありません。もう一つは、Window2を閉じたくないということです。私はMainWindowから閉じたいと思っています。 – Xexolas

+0

私は詳細な説明で答えを拡張しました。まずビジネスロジックを洗練してから、コードベースを実装する必要があるようです私の答えに説明されています。この時点で、私はこの議論を終わらせます。あなたのプロジェクトに幸運。宜しくお願いします、 –

関連する問題