2010-08-14 3 views
0

Maintenant, je suis une fenêtre d'installation, qui ont un bouton d'annulation pour 1) mettre en pause le storyboard 2) entrebaillantes mon Annuler la fenêtreproblème de fenêtre Popout pour WPF

Pour Annuler la fenêtre, il y aura un « OK » bouton pour que je sois invité à la fenêtre Échoué. Donc maintenant je veux savoir comment suivre quand l'utilisateur ferme le bouton de la fenêtre (X), ainsi je peux fermer la fenêtre d'annulation et retourner ainsi à la fenêtre d'installation et reprendre mon storyboarding.

Jusqu'à présent, je l'ai fait ce

private void cancel_btn_Click(object sender, RoutedEventArgs e) 
{ 
    Storyboard SB = (Storyboard)FindResource("Install"); 
    SB.Pause(); 

    popout_Cancel MyApp = new popout_Cancel(); 
    MyApp.Show(); 

    if (MyApp.OK.IsMouseCaptured == false) 
    { 
     MyApp.Close(); 
     SB.Resume(); 
    } 
} 
+0

pourquoi ne vous cachez pas seulement le (x) bouton & forcer l'utilisateur à utiliser uniquement annuler? –

Répondre

0

Vous pouvez afficher la fenêtre comme une boîte de dialogue de modèle et utiliser DialogResult pour obtenir le résultat. Si je vous ai bien compris, vous voulez savoir si l'utilisateur a appuyé sur Annuler par rapport à s'il a simplement fermé la fenêtre? Je ne sais pas si c'est ce que votre demande, mais si vous voulez juste afficher une boîte de dialogue de confirmation et obtenir le résultat, voici comment:

Dans la fenêtre annuler:

private void CancelWindow_OnOkClickedobject sender, RoutedEventArgs e) 
{ 

    this.Close(); 
} 

private void CancelWindow_OnCancelClickedobject sender, RoutedEventArgs e) 
{ 
    this.DialogResult = true; 
    this.Close(); 
} 

Puis, quand vous voulez afficher cette fenêtre:

popout_Cancel MyApp = new popout_Cancel(); 

bool? result = MyApp.ShowDialog(); 

Si l'utilisateur appuie sur annuler, le résultat sera défini sur true. Si l'utilisateur appuie sur le bouton X ou appuie sur OK, le résultat sera défini sur false.

Une fois que vous avez le résultat, vous pouvez reprendre votre storyboard. Ainsi, le code ressemblerait à ceci:

Storyboard SB = (Storyboard)FindResource("Install"); 

SB.Pause(); 

popout_Cancel MyApp = new popout_Cancel(); 

bool? result = MyApp.ShowDialog(); 

if (result == null || result == false) 
    SB.Resume(); 
else 
    //they really want to cancel, terminate the app 

Modifié: ShowDialog() retourne une Nullable, bien que ShowDialog() retourne apparemment seulement vrai ou faux

+0

Bonjour, j'ai essayé d'utiliser votre code et quand je débogue, tt m'indiquer cette erreur: Impossible de convertir implicitement le type 'bool?' à 'bool'. Une conversion explicite existe (vous manque un casting?) – BabyChar

+0

Avait un couple de plus de fautes de frappe que j'ai raté dans le montage. Je venais de me lever quand j'ai écrit ça, alors je suis sûr qu'il y a d'autres problèmes mineurs. Voir l'article ici: http://msdn.microsoft.com/en-us/library/bb384091.aspx Le problème est bool? est un nul qui signifie qu'il peut être vrai, faux ou nul. Sur quelle ligne avez-vous l'exception? – mfanto

+0

Bonjour. le code ci-dessus peut déboguer, si j'appuie sur X de la fenêtre cela fonctionne parfaitement .. et oui c'est ce que je voulais .. mais quand je débogue, popout, et si j'appuie sur X, le SB oui est continué. mais jusqu'à la fin de la SB, il me demandera de terminer la page, mais je ne pouvais pas cliquer sur ... ce qui signifie qu'il se bloque .. – BabyChar