Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1667 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  WPF c# et xaml

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

WPF c# et xaml

n°2267176
NicoLag
Posté le 06-10-2015 à 22:04:36  profilanswer
 

Bonjour à tous,
Je fait actuellement un petit logiciel tout simple et du coup, pour me faire la main, j'ai décidé de passer au WPF. Jusqu'ici tout va bien, j'ai créer une interface et j'ai même réussi à faire en sorte que si l'utilisateur clique sur un bouton un onglet se cré. (Ce qui est déjà une victoire en soi!!). Maintenant je voudrais savoir comment faire pour remplir cette "page" avec un formulaire (des boutons où je veux, des champs à remplir où je veux...)
Je pensais soit c'est possible directement par le code C# mais je vois pas comment définir et placer les composants, soit "préfabriquer" les onglets dont j'ai besoin en xaml et les "incruster" dans l'onglet au moment de la création. Mais ça non plus je sais pas comment le mettre en place.  
Merci pour votre aide.  
Pour info, j'ai pas mal cherché sur Google et autre et j'ai pas trouvé de réponse qui me conviennes (et oui j'ai vu le MVVM mais ça me fait un peu l'impression de prendre un semi remorque pour trimbaler un paquet de mouchoir!!)
Encore merci
Nico

mood
Publicité
Posté le 06-10-2015 à 22:04:36  profilanswer
 

n°2267483
TotalRecal​l
Posté le 10-10-2015 à 13:05:35  profilanswer
 

Tu dois avoir un tas de réponses en cherchant dans un moteur de recherche sur "wpf dynamic control creation" et on ne peut pas te pondre des réponses de 3 pages pour une chose sur laquelle tu trouveras plein de tutos, donc il faudrait que tu précises un peu la question et/ou les soucis rencontrés.
 
Outre la creation dynamique tu devrais regarder aussi les custom controls, user controls et cie.
 
Pas besoin de MVVM effectivement.


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2267532
NicoLag
Posté le 11-10-2015 à 01:28:28  profilanswer
 

Merci pour ta réponse. Je vais creuser ce "dynamic control creation".  
J'ai commencé à regarder les user control et mon soucis concerne la récupération d'événements.  
Par exemple : l'utilisateur souhaite compléter les infos d'un contact inscrit dans la bdd. Il clique sur un bouton pour faire apparaître un onglet comprenant les informations du contact. Ce formulaire "n'existe pas" à l'ouverture, je pensais faire un user control comprenant tous les champs et boutons nécessaires. Maintenant la question est comment pré remplir ce formulaire avec les infos du contact et surtout mettre à jour la base en cliquant sur un bouton.  
Encore merci pour les réponses.

n°2267622
NicoLag
Posté le 12-10-2015 à 22:44:03  profilanswer
 

Alors j'ai creusé les évènements sur les usercontrol. J'ai fait une petite appli test avec un usercontrol comprenant un bouton et un label. J'ai mis une propriété publique pour pouvoir modifier le contenu de mon label.  
Sur ma fenêtre j'ai juste un bouton. Si je clique sur mon bouton, le user control est ajouté et je peux l'ajouter plusieurs fois.
Quand je clique sur le bouton d'un des usercontrol ainsi ajouté, l'évènement est reconnu.
Maintenant j'aimerais pouvoir savoir  quel bouton a été sollicité et modifier le label lié.
Pourriez vous m'aider ?
 
Voila mon code du usercontrol :

Code :
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Data;
  9. using System.Windows.Documents;
  10. using System.Windows.Input;
  11. using System.Windows.Media;
  12. using System.Windows.Media.Imaging;
  13. using System.Windows.Navigation;
  14. using System.Windows.Shapes;
  15. namespace WpfApplication2
  16. {
  17.     /// <summary>
  18.     /// Logique d'interaction pour UserControl1.xaml
  19.     /// </summary>
  20.     public partial class UserControl1 : UserControl
  21.     {
  22.         public event EventHandler<EventArgs> buttonClick;
  23.         public UserControl1()
  24.         {
  25.             InitializeComponent();
  26.         }
  27.         private void btn_UC_Click(object sender, RoutedEventArgs e)
  28.         {
  29.             if (buttonClick != null)
  30.                 buttonClick.Invoke(sender, EventArgs.Empty);
  31.         }
  32.         public string Title
  33.         {
  34.             get { return this.lbl_titre.Content.ToString(); }
  35.             set { this.lbl_titre.Content = value.ToString(); }
  36.         }
  37.     }
  38. }


 
Le code xaml :

Code :
  1. <UserControl x:Class="WpfApplication2.UserControl1"
  2.              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  5.              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  6.              mc:Ignorable="d"
  7.              d:DesignHeight="46" d:DesignWidth="300">
  8.     <Grid>
  9.         <StackPanel Orientation="Vertical">
  10.             <Label Name="lbl_titre">Test de mon user control</Label>
  11.             <Button Name="btn_UC" Click="btn_UC_Click">Mon bouton</Button>
  12.         </StackPanel>
  13.     </Grid>
  14. </UserControl>


 
Le code xcml de la fenêtre:

Code :
  1. <Window x:Class="WpfApplication2.MainWindow"
  2.         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.         xmlns:my="clr-namespace:WpfApplication2"
  5.         Title="MainWindow" Height="350" Width="525" WindowStartupLocation="CenterScreen">
  6.     <Grid>
  7.         <StackPanel Orientation="Vertical" Name="stk1">
  8.             <Button Name="btn_new" Click="btn_new_Click">Nouveau bouton</Button>
  9.         </StackPanel>
  10.     </Grid>
  11. </Window>


 
Le code cs qui va avec :

Code :
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Data;
  9. using System.Windows.Documents;
  10. using System.Windows.Input;
  11. using System.Windows.Media;
  12. using System.Windows.Media.Imaging;
  13. using System.Windows.Navigation;
  14. using System.Windows.Shapes;
  15. namespace WpfApplication2
  16. {
  17.     /// <summary>
  18.     /// Logique d'interaction pour MainWindow.xaml
  19.     /// </summary>
  20.     public partial class MainWindow : Window
  21.     {
  22.         public MainWindow()
  23.         {
  24.             InitializeComponent();
  25.         }
  26.         int i = 0;
  27.        
  28.         private void btn_new_Click(object sender, RoutedEventArgs e)
  29.         {
  30.            
  31.             UserControl1 Uc = new UserControl1();
  32.             Uc.Name = "Uc" + i.ToString();
  33.             Uc.Title = "Test de mon UC";
  34.             Uc.buttonClick += new EventHandler<EventArgs>(Uc_btn_Click);
  35.             stk1.Children.Add(Uc);
  36.             i += 1;
  37.         }
  38.         void Uc_btn_Click(object sender, EventArgs e)
  39.         {
  40.             MessageBox.Show("GREAT JOB" );
  41.         }
  42.     }
  43. }

n°2267630
TotalRecal​l
Posté le 13-10-2015 à 09:25:13  profilanswer
 

Y a de l'idée. C'est assez compliqué comme mise en oeuvre pour un truc aussi simple mais on sent que tu comprends et applique les concepts, c'est bien.
 
Pour info au lieu de              
Uc.buttonClick += new EventHandler<EventArgs>(Uc_btn_Click);
tu peux juste écrire              
Uc.buttonClick += Uc_btn_Click;
Ca revient au même.
 
Idem pour buttonClick.Invoke(sender, EventArgs.Empty);
Qui peut juste s'écrire buttonClick(sender, EventArgs.Empty);
 
Concernant ta question, tu peux par exemple utiliser l'EventArgs pour passer des infos supplémentaires.


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2267903
NicoLag
Posté le 16-10-2015 à 20:02:03  profilanswer
 

Salut, j'ai creusé les EventArgs mais j'ai vraiment du mal à trouvé un tuto "simple". Je voudrais juste récupérer le Uid de mon usercontrol inséré dynamiquement. J'avoue que je veux bien un petit coup de main!!
Merci d'avance.

n°2267924
NicoLag
Posté le 17-10-2015 à 09:08:21  profilanswer
 

Après plusieurs test infructueux, je me rend compte que le Uid ne va pas me servir. En fait j'aimerais que lors du clique, je puisse récupérer le nom du usercontrol afin d'agir sur ce qu'il y a à l'intérieur comme, dans mon exemple, changer la valeur du label. Une fois que j'aurais compris ça, j'essaierai de faire pareil mais en récupérant la valeur d'une textbox qui sera à la place de mon label. Merci pour votre aide.


Message édité par NicoLag le 17-10-2015 à 09:08:47
n°2267926
NicoLag
Posté le 17-10-2015 à 10:48:12  profilanswer
 

Heureusement la débilité n'est mortelle ! (Sinon l'enterrement aurait eu lieu lundi !!) Quand je lis 15fois que le usercontrol est autonome ça veut peut être dire qu'il est... Autonome!!! Du coup dans l'événement click de mon bouton a l'intérieur du usercontrol, je lui dit quoi faire sur le usercontrol et ça fonctionne!!! Merci pour votre aide

n°2267948
TotalRecal​l
Posté le 17-10-2015 à 14:47:06  profilanswer
 

Oui effectivement, rien ne t'oblige à propager l'événement pour le gérer depuis ta feuille parente comme tu le faisais plus haut, tu peux très bien le gérer localement si ça te permet de faire ce que tu veux.  
Ca dépend complètement de l'utilisation, mais propager a aussi son utilité.  
 
N'hésite pas à l'avenir. Tu peux aussi venir poser tes questions dans le topic en lien dans ma signature si tu veux.


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  WPF c# et xaml

 

Sujets relatifs
CheckBox dans datatemplate WPF Comment importer ColorDialog (windows.forms) dans WPF en VB.NET ?
[MVVM/WPF] Binding et DependencyProperty avec une ObservableCollection[RECH] WPF Tutorial datagrid/databinding avec Table Oracle
DataBinding WPF[C#] [WPF] User control dans data template
Databinding sur 2 combox en WPFDéploiement d'une application WPF pour navigateur
Problème WPF / Entity Framework / Data Binding[C# & WPF] Taille d'une image
Plus de sujets relatifs à : WPF c# et xaml


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR