2017-09-22 9 views
1

xaml(P画面)でGridコントロールを使用しているC#WPFアプリケーションがあります。グリッド内のすべての行について、Details.Clickingという項目がありますこの列にはポップアップウィンドウが表示され、xaml(C画面)にもグリッドが表示されます。 Pさんのviewmodelで私の項目のクリックイベントには、次のコードがあります:ユーザーがアイテムを複数回クリックした場合、私はちょうど、既存のCポップアップを強調したい、WPFアプリケーションのポップアップウィンドウ

var myChildWindow = new MyGridView(); 
myChildWindow.Show(); 

をwindow.Ifいない既存の窓が開いてあります、私は新しいウィンドウを開きたいだけです。

私はWinformsアプリケーションのための同様の要件に取り組んできました。私はWPFアプリケーションのためにこれについてどうしますか?

ありがとうございました。

+0

は、このプロジェクトの背後には、コードされていますか? –

答えて

1

まず、myChildWindowをクリックイベントの外に宣言して、複数のイベントからアクセスできるようにする必要があります。だから、

MyGridView myChildWindow; 

はおそらくプライベート変数として、クリックイベントの外になります。

クリックイベントでは、それがnullであるかどうかを確認し、そうであれば作成してください。

if (myChildWindow == null) 
{ 
    myChildWindow = new MyGridView(); 
    myChildWindow.Show(); 
} 
+0

応答のためにサクセスに感謝します。しかし、このアプローチを用いると、例えば、 3行目のポップアップウィンドウがすでにアクティブで、5行目のポップアップをクリックすると、新しいウィンドウが開かず、既存のウィンドウ自体が強調表示されます。 私のアプリケーションでは、すべての行がいくつかのデータをポップアップウィンドウに渡します。したがって、各行のポップアップが異なります。 –

+0

即時溶液;各行を表す別々のウィンドウがあります。しかし、私はここであなたのデザインに大きな問題を感じています。ポップアップまたは任意の種類のフォーム/ウィンドウは、情報を表示するためのデバイスです。したがって、_each_行のウィンドウの別のインスタンスを持つことは、かなりの冗長性です。あなたはあなたのアプローチを再考したいかもしれません。 1つのウィンドウがあり、ユーザーがクリックした行に応じて、適切なデータが表示されます。 – Sach

1

あなたは、ウィンドウへの参照を保持し、ウィンドウを閉じたときに、この取り除くことができます:

MyGridView myChildWindow; 
private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    if (myChildWindow == null) 
    { 
     myChildWindow = new MyGridView(); 
     myChildWindow.Closed += MyChildWindow_Closed; 
     myChildWindow.Show(); 
    } 
    else 
    { 
     myChildWindow.Activate(); 
    } 
} 

private void MyChildWindow_Closed(object sender, EventArgs e) 
{ 
    myChildWindow.Closed -= MyChildWindow_Closed; 
    myChildWindow = null; 
} 
関連する問題