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 :

Réduire un tableau [Débutant]


Sujet :

Windows Presentation Foundation

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 56
    Points : 51
    Points
    51
    Par défaut Réduire un tableau
    Bonjour,

    Je souhaiterais réaliser en WPF un ensemble de tableaux qui peut être réduit et agrandi. Plus précisément, je souhaiterais qu'en cliquant (ou double cliquant) sur la 1ere ligne de mon tableau, il se "développe" ou se "repli" en fonction de son état.

    Du coup, je souhaiterais réaliser un control permettant d'afficher un tableau de ce type. Mais je dois avouer que je bloque un peut sur la façon de le réaliser... Dois je faire un tableau (genre ListView) et changer le nombre de lignes ? Ou existe-t-il une autre façon de réaliser un tableau "réductible" ?

    Merci par avance pour vos conseils !

    Okami

  2. #2
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour

    Le moyen le plus simple à mon avis,est d'avoir une reference sur le ItemsPanelTemplate du Items.Control (dgv,listview qui heberge tous les items) ....
    Apres il faut personnaliser les Headers de Columns globalement dans un style ou l'on definira un handler charger de changer la prop visibility du ItemsPanelTemplate...

    code .cs du class data exemple :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ComponentModel;
    using System.Collections.ObjectModel;
     
    namespace WpfExpandableDGV
    {
        public class Person : INotifyPropertyChanged
        {
            public Person()
            {
                ID = 0;
                FName = "nothing";
            }
            public Person(int pid,string pfname):this()
            {
                ID = pid;
                FName = pfname;
            } 
            private int m_id; //un entier nullable 
            public int ID
            {
                get { return m_id; }
                set { m_id = value; OnPropertyChanged("ID"); }
            }
     
            private string  m_fname;
     
            public string FName
            {
                get { return m_fname; }
                set { m_fname = value; OnPropertyChanged("FName"); }
            }
     
     
     
     
     
            public event PropertyChangedEventHandler PropertyChanged;
            protected void OnPropertyChanged(string name)
            {
                PropertyChangedEventHandler handler = PropertyChanged;
                if (handler != null)
                {
                    handler(this, new PropertyChangedEventArgs(name));
                }
            }
        }
     
        public class Persons : ObservableCollection<Person>
        {
            public Persons()
            {
                for (int i = 1; i < 11; i++)
                {
                    Person p = new Person(i, "item" + i.ToString());
                    this.Add(p);
                }
     
            }
        }
    }
    code xaml du Fom:
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
     
    <Window x:Class="WpfExpandableDGV.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:WpfExpandableDGV" 
            Title="MainWindow" Height="350" Width="525">
        <Window.Resources>
            <local:Persons x:Key="src"/>
            <Style x:Key="DGCHeaderStyle" TargetType="DataGridColumnHeader">
                <Setter Property="Height" Value="30"/>
                <Setter Property="Background" Value="Brown" />
                <Setter Property="Foreground" Value="Yellow"/>
                <Setter Property="FontSize" Value="14" />
                <Setter Property="FontFamily" Value="Calibri" />
                <EventSetter Event="Click" Handler="HeaderClicked"/>
            </Style>
            <Style x:Key="DGHeaderStyle" TargetType="{x:Type DataGrid}">
                <Setter Property="ColumnHeaderStyle" Value="{StaticResource    DGCHeaderStyle}"/>
     
            </Style>
        </Window.Resources>
        <Grid>
            <DataGrid 
                Name="DG1" ItemsSource="{Binding Source={StaticResource src}}" 
                AutoGenerateColumns="True" 
                Style="{StaticResource  DGHeaderStyle}"
                 >
                <DataGrid.ItemsPanel >
                    <ItemsPanelTemplate   >
                        <StackPanel x:Name="pnl" 
                                    VirtualizingStackPanel.VirtualizationMode="Standard"
                                    VirtualizingStackPanel.IsVirtualizing="True"
                                    Loaded="pnl_Loaded"/>
                    </ItemsPanelTemplate> 
                </DataGrid.ItemsPanel>
                <DataGrid.RowStyle>
                    <Style TargetType="DataGridRow">
                        <Setter Property="Background" Value="LightBlue" />
                        <Style.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="Background" Value="Blue"/>
                                <Setter Property="Foreground" Value="White"/>
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </DataGrid.RowStyle>
            </DataGrid>
        </Grid>
    </Window>
    code .cs du Form :
    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
     
    namespace WpfExpandableDGV
    {
        /// <summary>
        /// Logique d'interaction pour MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            StackPanel pnl = null;
            public MainWindow()
            {
                InitializeComponent();
     
            }
            private void pnl_Loaded(object sender, RoutedEventArgs e)
            {
                pnl = sender as StackPanel;
            }
            private void HeaderClicked(object sender, RoutedEventArgs e)
            {
                if (this.pnl == null) return;
     
                if (this.pnl.Visibility == Visibility.Visible)
                    this.pnl.Visibility = Visibility.Collapsed;
                else
                    this.pnl.Visibility = Visibility.Visible;
            }
     
     
     
     
        }
    }
    Bon code..

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 56
    Points : 51
    Points
    51
    Par défaut
    Bonjour,

    Merci beaucoup pour ton aide. Je vais regarder ça de plus près. Au pire des cas, j'ai découvert l’existence des Expander aussi. Je pourrais peut être bidouiller quelques chose avec ça...

    Encore merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réduire un tableau
    Par ludocorpe dans le forum Langage
    Réponses: 2
    Dernier message: 08/06/2015, 18h11
  2. [PHP 5.2] Cherche fonction pour réduire un tableau aux valeurs non vides
    Par renaud26 dans le forum Langage
    Réponses: 3
    Dernier message: 02/06/2011, 17h59
  3. Réponses: 2
    Dernier message: 16/11/2007, 09h59
  4. Réduire taille lignes d'un tableau
    Par tidoc dans le forum VB.NET
    Réponses: 3
    Dernier message: 01/08/2007, 14h18
  5. Réduire des cases de tableau..
    Par davinout dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 02/06/2006, 09h09

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