UserControl.xaml vers MainWindows.xaml

Résolu
blackhox Messages postés 36 Date d'inscription jeudi 31 octobre 2013 Statut Membre Dernière intervention 20 août 2016 - 3 nov. 2013 à 20:38
blackhox Messages postés 36 Date d'inscription jeudi 31 octobre 2013 Statut Membre Dernière intervention 20 août 2016 - 13 déc. 2013 à 15:02
Bonsoir à tous,

Mon problème est le suivant :

Dans mainwindows.xaml j'ai des boutons me permettant d'afficher différent usercontrol.

J'effectue ça de cette façon

App.Current.MainWindow.Content = new ucContact();


Lorsque je suis sur mon usercontrol (ucContact) j'aimerais retourner vers mon MainWindow.xaml en appuyant sur un bouton mais je ne sais pas quelle commande utilisée.

Merci d'avance pour votre réponse.

6 réponses

Whismeril Messages postés 18416 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 juin 2023 623
Modifié par Whismeril le 3/11/2013 à 21:10
Bonsoir, je ne travaille pas en WPF, alors le comportement est peut-être différent qu'en windows form.

Si je dois lancer un Form2 depuis Form1 puis revenir à Form1 j'ajoute une référence à Form1 dans le constructeur de Form2.

Ainsi ton code deviendrait
App.Current.MainWindow.Content = new ucContact(MainWindow);


Ensuite dans ucContact, il faut gérer la variable pour pouvoir réafficher ta feuille principale quand tu le souhaites.

Penser aux balises de coloration syntaxique: bouton <>, préciser le langage :<code csharp>.
Quand la solution est trouvée, mettre la discussion Résolue.
0
blackhox Messages postés 36 Date d'inscription jeudi 31 octobre 2013 Statut Membre Dernière intervention 20 août 2016
Modifié par blackhox le 3/11/2013 à 21:36
Merci pour la réponse rapide.
Donc dans mon constructeur de mon usercontrol ucContact, je peux rajouter quoi? Je vois ce que vous voulez dire, mais je ne sais pas comment l'implémenter

public ucContacter()
{
InitializeComponent();
}

Merci d'avance en tout cas...
0
Whismeril Messages postés 18416 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 juin 2023 623
3 nov. 2013 à 22:46
MainWindow localMainWindow;//déclare une instance locale du type de MainWindow

public ucContacter(MainWindow MaMainWindow)//demande la référence dans la signature du constructeur
{
localMainWindow = MaMainWindow;//passe la référence à la variable locale
InitializeComponent();
}

0
blackhox Messages postés 36 Date d'inscription jeudi 31 octobre 2013 Statut Membre Dernière intervention 20 août 2016
Modifié par blackhox le 3/11/2013 à 23:12
Apparemment j'ai quelques petits soucis

Dans ma classe MainWindow.xaml j'ai donc un bouton pour afficher mon user Control contact

private void buttonContact_Click(object sender, RoutedEventArgs e)
{
App.Current.MainWindow.Content = new ucContacterClientSms(new MainWindow());
}


Jusqu'ici tout va bien..mon user control s'affiche correctement après le clic.

Dans ma classe usercontrolContact j'ai ceci :

public partial class ucContact : UserControl
{
MainWindow localMainWindow;
public ucContacterClientSms(MainWindow MaMainWindow)
{
localMainWindow = MaMainWindow;
InitializeComponent();
}
//Clique sur un bouton pour revenir à MainWindow.xaml
private void button2_Click(object sender, RoutedEventArgs e)
{
App.Current.MainWindow.Content = new ucContacterClientSms(new mainWindow());//????
}
}


Lors du click pour retourner à ma MainWindow.xaml rien ne s'effectue. Je fais surement une fausse manipulation.

Merci d'avance pour votre réponse.
0
Whismeril Messages postés 18416 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 juin 2023 623
4 nov. 2013 à 07:04
Dans le bouton2 le code veut créer une nouvelle instance de mainwindos. Il faut que tu utilises la référence que tu as transférée. Tu mets cette instance de mainwindows au premier plan.
Je ne sais pas comment on fait en Wpf.
0
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
5 nov. 2013 à 13:52
Bonjour,
comme tu as la référence de ton MainWindow au départ dans la variable localMainWindow de ton usercontrol. Je pense que tu pourrais simplement mettre cette ligne:
//Clique sur un bouton pour revenir à MainWindow.xaml
private void button2_Click(object sender, RoutedEventArgs e)
{
App.Current.MainWindow.Content = localMainWindow
}

pour être puriste je rajouterai le test différent de null pour localMainWindow
0
blackhox Messages postés 36 Date d'inscription jeudi 31 octobre 2013 Statut Membre Dernière intervention 20 août 2016
Modifié par blackhox le 5/11/2013 à 23:41
Merci pour votre réponse, mais si je fais comme vous me dites:

//MainWindows.xaml.cs
//J'appelle mon usercontrol il s'affiche correctement
private void buttonContacterClientSms_Click(object sender, RoutedEventArgs e)
{
App.Current.MainWindow.Content = new ucContacterClientSms(new MainWindow());
}


//userControlContact.xaml.cs
MainWindow localMainWindow;
public ucControlContact(MainWindow MaMainWindow)
{
localMainWindow = MaMainWindow;
InitializeComponent();
}


//Clique sur bouton pour revenir à MainWindows.xaml depuis userControlContact.xaml.cs
private void button2_Click(object sender, RoutedEventArgs e)
{
App.Current.MainWindow.Content = localMainWindow;
}


Il m'affiche l'erreur suivante pour button2_click :
Window doit être la racine de l'arborescence. Impossible d'ajouter Window comme enfant de Visual
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
6 nov. 2013 à 10:04
Bonjour,
Je pense qu'il faut que tu passes par un évènement personnel que tu vas lever dans ton user control. et dasn la fonction accrochée à ton évènement, tu restaures ton content que tu auras stocké avant d'appeler ton user control. quelques chose de la sorte
CurrentMainWindow =App.Current.MainWindow.Content ; 
App.Current.MainWindow.Content = new ucContact();

et dans la function de l'évènement
App.Current.MainWindow.Content  = CurrentMainWindow;


tu passeras l'évènement à ton user control.
0
blackhox Messages postés 36 Date d'inscription jeudi 31 octobre 2013 Statut Membre Dernière intervention 20 août 2016
6 nov. 2013 à 14:35
Donc quand je suis dans mon ucContact, dans l'évenement clique sur le bouton pour retourner à MainWindows.xaml je place ceci?
App.Current.MainWindow.Content  = CurrentMainWindow;


Où dois-je placer
CurrentMainWindow =App.Current.MainWindow.Content ; 
App.Current.MainWindow.Content = new ucContact();


Je ne suis pas certain d'avoir saisi.
0
DevLama Messages postés 356 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 18 novembre 2021 10
22 nov. 2013 à 08:53
Salut je suis sur la technologie WPF,pour resoudre ton probleme il faut que tu utilise dans ta fenetre principal un border qui recevra des usercontrols

this.border.child=new UserControl1();
0
blackhox Messages postés 36 Date d'inscription jeudi 31 octobre 2013 Statut Membre Dernière intervention 20 août 2016
Modifié par blackhox le 10/12/2013 à 15:07
Bonjour et désolé pour le retard

Je viens d'ajouter un border sur ma MainWindow.xaml pour aller vers un usercontrols et ça fonctionne parfaitement.

Mais comment puis-je retourner vers mon MainWindow.xaml lorsque je suis sur mon usercontrols?

Ou alors mon mainWindow.xaml doit être vide et utilisé que des usercontrols qui viennent dessus?

Merci d'avance pour votre réponse.
0
blackhox Messages postés 36 Date d'inscription jeudi 31 octobre 2013 Statut Membre Dernière intervention 20 août 2016
13 déc. 2013 à 15:02
Alors effectivement votre solution fonctionne.

Je m'explique :

Dans ma mainwindow.xaml, je place un border.
Dans mes userControl je place également un border et je peux naviguer entre les différents usercontrol comme je veux via

this.border.child=new UserControl1();
Merci pour votre aide
0