IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Equivalent Xaml en Code C#


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 38
    Par défaut Equivalent Xaml en Code C#
    Le bonjour,

    Dans le cadre d'une listview qui s'auto-peuple par un Dataset (ce qui marche ma fois très bien, ya quelques exemples ici même (dans ce forum)), j'aurai besoin de faire un EditBox (class sympathique qui permet de se mettre en mode édition dans un listview). Je précise que cette listview est une class qui hérite de Listview...

    Le petit soucis que j'ai, c'est que que l'implémentation du style se fait dans le Xaml, je le voudrais dans la création de ma listview au moment ou je "crée" les colonnes, et donc pas la même coder dans le C# la partie celltemplate qu'on trouve aussid ans le Xaml.

    Création des colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
                // On crée les colonnes
                GridView gv = new GridView();
                for (int i = 0;  i < this._DsResultatRequete.Tables[_LibelleTable].Columns.Count; i++)
                {
                    GridViewColumn gc = new GridViewColumn();
                    gc.Header = this._DsResultatRequete.Tables[_LibelleTable].Columns[i].ColumnName;
                    gc.DisplayMemberBinding = new Binding(this._DsResultatRequete.Tables[_LibelleTable].Columns[i].ColumnName);
                    gv.Columns.Add(gc);
                }
     
                // On gère la ListView et Xaml en même temps.
                Binding bind = new Binding();//On bind les données a la DataTable
                this.View = (ViewBase)gv;
                this.DataContext = this._DsResultatRequete.Tables[_LibelleTable]; // Déclarer la source du binding
                this.SetBinding(ListView.ItemsSourceProperty, bind); // Attacher au contrôle
    Création dans le Xaml du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
      <Window.Resources>
     
        <Style x:Key="{x:Type l:EditBox}" TargetType="{x:Type l:EditBox}" >
          <Setter Property="HorizontalAlignment" Value="Left"  />
          <Setter Property="Template">
            <Setter.Value>
              <ControlTemplate TargetType="{x:Type l:EditBox}">
                    <TextBlock x:Name="PART_TextBlockPart"  
                         Text="{Binding Path=Value,RelativeSource = {RelativeSource TemplatedParent}}">
                    </TextBlock>
              </ControlTemplate>
            </Setter.Value>
          </Setter>
        </Style>
      </Window.Resources>
    Appel du CellTemplate du Xaml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <GridViewColumn.CellTemplate>
                  <DataTemplate>
                    <l:EditBox   Height="25" Value="{Binding <mettre ici le nom de la colonne voulue>}"  />
                  </DataTemplate>
                </GridViewColumn.CellTemplate>
              </GridViewColumn>

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Oui mais.... quelle est ta question précisement ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 38
    Par défaut
    OOps pardon j'ai pas été clair
    Comment "traduire" la partie Xaml en C# pour l'inclure dans la "création" des colonnes (et donc dans al class afin de rendre tout ce la dynamique).

    Comment mettre le "style " et le "celltemplate" dans le permier bout de code citer (en faisant gc.celltemplate qqchose je suppose mais je vois rien de ce coté là...)

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Citation Envoyé par Harpist
    et donc pas la même coder dans le C# la partie celltemplate qu'on trouve aussid ans le Xaml
    Pour le faire tu peux voir dans ce post :
    http://www.developpez.net/forums/sho...t=DataTemplate
    Il y a un DataTemplate défini via le code. A toi de l'adapter et l'associer au GridViewColumn.CellTemplate

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    196
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 196
    Par défaut
    J'ai peut être compris de travers, mais s'il ne s'agit 'que' d'avoir tes XAML en C#, c'est assez bateau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var dt = new DataTemplate();            
    //dt.VisualTree = new EditBox(...) <= La, pas sur que VisualTree soit le bon, à essayer
     
    var gvc = new GridViewColumn();
    gvc.CellTemplate = dt;
    etc.


    PS : arf, les gens sont d'un rapide à répondre... pas grave

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 38
    Par défaut
    il y avait de l'idée, beaucoup d'idée même
    Mais ça ne fonctionne pas...
    J'ai du loupé qqchose ou faire une erreur...

    Je suis reparti de cet exemple du MSDN pour construire mes class EditBox et EditBoxADorner (jusqu'à là pas de problème, ouf).

    Pas de chance lors des l'implémentation dans le code (cf ci dessous) ça ne fonctionne pas à l'exécution (j'ai beau cliquer, double cliquer, voir m'acharner sur cette pauoooooooovre Listview rien n'y fait, je ne rentre pas dans les cellules.

    Qu'en disent nos magiciens du WPF ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
            private void Chargement_Resultat_Requete()
            {
                // On crée les colonnes
                GridView gv = new GridView();
                for (int i = 0;  i < this._DsResultatRequete.Tables[_LibelleTable].Columns.Count; i++)
                {
                    GridViewColumn gc = new GridViewColumn();
                    DataTemplate template = new DataTemplate(); //On associe un template pour les cellules qui vont être modifiables.
                    gc.Header = this._DsResultatRequete.Tables[_LibelleTable].Columns[i].ColumnName;
                    gc.DisplayMemberBinding = new Binding(this._DsResultatRequete.Tables[_LibelleTable].Columns[i].ColumnName);
     
                    // Si la colonne est une colonne "système" non soumise à modification par l'utilisateur on ne permet pas la création de l'editbox qui va avec.
                    if (!(Enum.IsDefined(typeof(Wyniwyg.Enums.ColonneSansEdition), gc.Header.ToString())))
                    {
                        FrameworkElementFactory BoiteEdition = new FrameworkElementFactory(typeof(Wyniwyg.IHM.WPFControls.EditBox));
                        BoiteEdition.SetBinding(TextBox.TextProperty, new Binding(gc.Header.ToString()));
                        template.VisualTree = BoiteEdition;
                        gc.CellTemplate = template;
                    }
                    gv.Columns.Add(gc);
     
                    // On rend la colonne non visible en mettant sa largeur à 0, si celle-ci est une colonne Timestamp.
                    if (Enum.IsDefined(typeof(Wyniwyg.Enums.ColonneSansEdition), gc.Header.ToString()))
                    {
                        if (gc.Header.ToString() != "Id") { gv.Columns[i].Width = 0; }
                    }
                }
                // On gère la ListView et Xaml en même temps.
                Binding bind = new Binding();//On bind les données a la DataTable
                this.View = (ViewBase)gv;
                this.DataContext = this._DsResultatRequete.Tables[_LibelleTable]; // Déclarer la source du binding
                this.SetBinding(ListView.ItemsSourceProperty, bind); // Attacher au contrôle
            }

Discussions similaires

  1. l'equivalent de ce code en java
    Par fk04 dans le forum Général Java
    Réponses: 1
    Dernier message: 19/01/2010, 07h11
  2. Problème de visualisation de composants entre XAML et code procédural
    Par Bindy dans le forum Windows Presentation Foundation
    Réponses: 14
    Dernier message: 16/03/2009, 11h39
  3. [ODBC] equivalent php de code asp
    Par ulovb dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 13/08/2008, 13h26
  4. WPF, Win32 app, XAML et code-behind?
    Par sacoum dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 27/05/2008, 10h06
  5. Equivalent de ce code sous IE?
    Par Death83 dans le forum Général JavaScript
    Réponses: 25
    Dernier message: 28/12/2005, 00h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo