UserControl.xaml vers MainWindows.xaml [Résolu]

blackhox 36 Messages postés jeudi 31 octobre 2013Date d'inscription 20 août 2016 Dernière intervention - 3 nov. 2013 à 20:38 - Dernière réponse : blackhox 36 Messages postés jeudi 31 octobre 2013Date d'inscription 20 août 2016 Dernière intervention
- 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.
Afficher la suite 

12 réponses

Répondre au sujet
Whismeril 11428 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention - Modifié par Whismeril le 3/11/2013 à 21:10
0
Utile
1
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.
blackhox 36 Messages postés jeudi 31 octobre 2013Date d'inscription 20 août 2016 Dernière intervention - 3 nov. 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...
Commenter la réponse de Whismeril
Whismeril 11428 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention - 3 nov. 2013 à 22:46
0
Utile
1
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();
}

blackhox 36 Messages postés jeudi 31 octobre 2013Date d'inscription 20 août 2016 Dernière intervention - 3 nov. 2013 à 23:06
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.
Commenter la réponse de Whismeril
Whismeril 11428 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention - 4 nov. 2013 à 07:04
0
Utile
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.
Commenter la réponse de Whismeril
cs_louis14 788 Messages postés mardi 8 juillet 2003Date d'inscription 8 mars 2017 Dernière intervention - 5 nov. 2013 à 13:52
0
Utile
1
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
blackhox 36 Messages postés jeudi 31 octobre 2013Date d'inscription 20 août 2016 Dernière intervention - 5 nov. 2013 à 23:28
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
Commenter la réponse de cs_louis14
cs_louis14 788 Messages postés mardi 8 juillet 2003Date d'inscription 8 mars 2017 Dernière intervention - 6 nov. 2013 à 10:04
0
Utile
1
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.
blackhox 36 Messages postés jeudi 31 octobre 2013Date d'inscription 20 août 2016 Dernière intervention - 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.
Commenter la réponse de cs_louis14
DevLama 353 Messages postés mercredi 13 avril 2011Date d'inscription 10 janvier 2018 Dernière intervention - 22 nov. 2013 à 08:53
0
Utile
2
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();
blackhox 36 Messages postés jeudi 31 octobre 2013Date d'inscription 20 août 2016 Dernière intervention - 10 déc. 2013 à 14:55
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.
blackhox 36 Messages postés jeudi 31 octobre 2013Date d'inscription 20 août 2016 Dernière intervention - 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
Commenter la réponse de DevLama

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.