2011-06-18 7 views
2

Silverlightで非同期に処理されない子ウィンドウを使用するにはどうすればよいですか?あなたは(私の知る限り)Silverlightで子ウィンドウを使用する方法は、showメソッドを使用することです:Silverlightで子ウィンドウを使用すると、非同期では実行されません。

ChildWindow update_dlg = new Update(); 
    update_dlg.Show(); 

をしかし、呼び出しは非同期であるとしながら、走り続けるので、あなたは、ダイアログからの入力を取得することはできません子供は私たちの窓。

+0

おそらく、この回答はあなたに役立ちますhttp://stackoverflow.com/questions/4127372/showdialog-dialogresult-alternative-in-silverlight – VikciaR

答えて

0

私はそれを見るようにこれを行う3つの方法があります。

1)メインアプリケーションで、サードパーティのクラスメンバーがtrueからfalseに切り替わり、子ウィンドウが閉じられたことを示すまで別のスレッドを起動します。次に、子ウィンドウで、シャットダウンやOKまたはキャンセルが行われたときに、このサードパーティのクラスメンバーがあまりにも偽に切り替わるなど(これは私がやった方法です)

2)メインでコールバック機能があります子ウィンドウによって呼び出されるプログラム。

3)チートのようなもので、子ウィンドウがまったくありません。代わりに、メインウィンドウのXAMLコードでは、表示される(実際には視覚的になる)隠された(ビジュアルに崩壊する)ポップアップまたは子ウィンドウのような長方形と、メインプログラムの他のすべてのフィールドがあります右のブーンが突き刺さるまで非アクティブに設定してください**

2

あなたは、子ウィンドウを閉じた後、ダイアログ結果を取得する必要があります。

MSDN pageから:

呼び出してウィンドウのコードビハインドページでClosedイベントを処理し、子ウィンドウからDialogResult値を取得します。 Closedイベントハンドラで、DialogResultプロパティにアクセスするには、senderパラメータをChildWindowまたは派生クラスにキャストします。

+0

私が使用するはずの子ウ​​ィンドウ以外のもの?たとえば、メッセージボックスは、ユーザーからの入力を取得するまで待機します。私は何らかの精巧なメッセージボックスの継承ウィンドウを使用できないのですか? – xarzu

1

私はアクションを子ウィンドウに渡すのが好きです。ユーザーが何も呼び出していないウィンドウをキャンセルした場合、ユーザーがウィンドウを受け入れると、ウィンドウからのパラメータでアクションが実行されます。このようにして、ユーザーが受け入れたときに実行されるコードは、依然として呼び出し元のウィンドウに書き込まれます。

関連する問題