2010-10-02 12 views
0

Il existe une MainWindow, une commande usercontrol qui se trouve dans ma MainWindow et un OtherForm que je vais montrer depuis usercontrol. J'ai envoyé OtherForm en tant que paramètre de MainWindow à usercontrol. Et dans usercontrol j'appelle OtherForm.showdialog. Lorsque je l'affiche la deuxième fois, je reçois le message "Impossible de définir la visibilité ou d'appeler Show, ShowDialog ou WindowInteropHelper.EnsureHandle après la fermeture d'une fenêtre".WPF usercontrol showdialog problème

code

En classe MainWindow

void Example() 
{ 
    usercontrol.Load(new Otherform{ variable= 1 }); 
} 

En classe Usercontrol

private Window _form; 
public void Load(window form) 
{ 
    _form=form; 
} 

void ExampleInUSerControl 
{ 
    _form.VerifyAccess(); 
    _form.Activate(); 
    _form.ShowActivated = true; 
    _form.ShowDialog(); 
} 

Répondre

2

Le message d'erreur dans ce cas est assez précis: une fois la fenêtre est fermée, il est fermé pour bien. Puisque ShowDialog() ferme toujours la fenêtre, vous devez créer une nouvelle instance de la fenêtre chaque fois que vous appelez ShowDialog().

Une façon assez simple à réaliser dans votre exemple est d'avoir l'événement Load prendre un argument de type Func<Window>:

Dans MainWindow:

private Window MakeWindow() 
{ 
    return new MyWindow(); 
} 

private void Example() 
{ 
    usercontrol.Load(MakeWindow); 
} 

Dans le contrôle de l'utilisateur:

Notez, en passant, qu'il ne devrait y avoir aucune raison d'appeler Activate ou définir ShowActivated - ShowDialog fera tout cela. Et je ne sais pas pourquoi vous appelez le VerifyAccess non plus.