2010-11-08 3 views
3

En WPF j'ai souvent utilisé une telle construction:"ShowDialog/DialogResult" alternatif dans Silverlight

SomeChildWindow dlg = new SomeChildWindow(); 
dlg.ShowDialog(); 
... 
//child window is closed either by "this.DialogResult = true;" or just by "Close();"  
//and in Parent window after Child window is closed we can use condition based on that 
... 

    if (dlg.DialogResult == true) 
     { 
      //do something 
     } 

Mais dans Silverlight cette approche ne fonctionne pas.

Quelle est l'alternative dans Silverlight pour cela? Je veux dire comment il est censé obtenir un retour de la fenêtre enfant dans Silverlight?

Répondre

5

Silverlight ne prend pas en charge les boîtes de dialogue entièrement modales, ce qui empêche l'approche traditionnelle pour la vérification des résultats de dialogue. Au lieu de cela, vous devez affecter un gestionnaire d'événements à la boîte de dialogue qui traitera le résultat de la boîte de dialogue. L'événement est ChildWindow.Closed.

Vous pouvez ensuite obtenir ChildWindow.DialogResult dans ce gestionnaire d'événements pour le gérer en conséquence.

private void OnDialogClosed(object sender, EventArgs args) 
{ 
    var window = (ChildWindow)sender; 
    if (window.DialogResult ?? false) 
    { 
    } 
    else 
    { 
    } 
} 
+0

Merci, Jeff. Ça marche. Mais lorsque vous déposez "== true" comme vous le suggérez, j'obtiens une erreur: "Impossible de convertir implicitement le type 'bool?' 'bool' Une conversion explicite existe (manque-t-il une distribution?) " – rem

+0

@rem: Totalement oublié que le résultat est nullable. Désolé pour ça. Personnellement, j'utiliserais 'window.DialogResult ?? false', plutôt que 'window.DialogResult == true'. –

+0

OK, merci. +1 – rem

8

Vous pouvez le faire en manipulant l'événement close:

SomeChildWindow dlg = new SomeChildWindow(); 

dlg.Closed += (s, eargs) => 
{ 
    if(dlg.DialogResult == true) 
    { 
     //do something 
    } 
}; 

dlg.Show(); 
+0

Merci, Geoff. +1 – rem

Questions connexes