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 :

Datagrid Focus sur une ligne sélectionnée


Sujet :

Windows Presentation Foundation

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur C#
    Inscrit en
    Avril 2011
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur C#
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 348
    Points : 191
    Points
    191
    Par défaut Datagrid Focus sur une ligne sélectionnée
    Bonjour,

    J'ai une datagrid lié à une OBservableCollection.
    Le selectedItem est lui aussi attaché à un élement de cette Observable Collection.

    Mon problème :

    Quand une ligne est sélectionne, la datagrid ne focus pas la ligne, je ne la voit pas à l'écran, il faut que je scroll jusque la.

    Existe-t'il une manière de auto-scroller vers la ligne sélectionnée ?

  2. #2
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 570
    Points
    3 570
    Par défaut
    Tu as la méthode ScrollIntoView : http://msdn.microsoft.com/en-us/libr...(v=vs.95).aspx

    Vu que c'est une méthode du contrôle, il va falloir l’appeler en code-behind.

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur C#
    Inscrit en
    Avril 2011
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur C#
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 348
    Points : 191
    Points
    191
    Par défaut
    Bonjour,

    J'avais déjà vu cette méthode mais vu que c'était une méthode du data grid, j'aurais voulu ne pas utlilser du code behind, maintenant si c'est la seule solution ... Je l'utiliserai ^^

    Personne d'autre aurait une idée ? :-)

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 52
    Points : 63
    Points
    63
    Par défaut
    Bonjour,
    A l'aide d'un behavior ?
    j'avais posté ce message pour une listbox en l'adaptant à la datagrid ça devrait le faire.

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur C#
    Inscrit en
    Avril 2011
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur C#
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 348
    Points : 191
    Points
    191
    Par défaut
    Bonjour,

    Merci à vous pour vos réponses.

    Je pense que je vais adapter la methode du datagrid avec le scrollintoview.

    Merci pour ces informations

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur C#
    Inscrit en
    Avril 2011
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur C#
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 348
    Points : 191
    Points
    191
    Par défaut
    Bonjour je reviens vers vous pour une aide ^^

    J'ai décidé de mettre le scollintoview dans le XAML, j'ai alors décidé d'utiliser la méthode de sfxzeus :

    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
        public class DatagridItemBehavior
        {
            public static bool GetIsBroughtIntoViewWhenSelected(DataGridRow dataGridRow)
            {
                return (bool)dataGridRow.GetValue(IsBroughtIntoViewWhenSelectedProperty);
            }
     
            public static void SetIsBroughtIntoViewWhenSelected(
              DataGridRow dataGridRow, bool value)
            {
                dataGridRow.SetValue(IsBroughtIntoViewWhenSelectedProperty, value);
            }
     
            public static readonly DependencyProperty IsBroughtIntoViewWhenSelectedProperty =
                DependencyProperty.RegisterAttached(
                "IsBroughtIntoViewWhenSelected",
                typeof(bool),
                typeof(DatagridItemBehavior),
                new UIPropertyMetadata(false, OnIsBroughtIntoViewWhenSelectedChanged));
     
            static void OnIsBroughtIntoViewWhenSelectedChanged(
              DependencyObject depObj, DependencyPropertyChangedEventArgs e)
            {
                DataGridRow item = depObj as DataGridRow;
                if (item == null)
                    return;
     
                if (e.NewValue is bool == false)
                    return;
     
                if ((bool)e.NewValue)
                    item.Selected += OnDataGridRowSelected;
                else
                    item.Selected -= OnDataGridRowSelected;
     
                if (item != null)
                    item.BringIntoView();
            }
     
            static void OnDataGridRowSelected(object sender, RoutedEventArgs e)
            {
                // Only react to the Selected event raised by the TreeViewItem
                // whose IsSelected property was modified. Ignore all ancestors
                // who are merely reporting that a descendant's Selected fired.
                if (!Object.ReferenceEquals(sender, e.OriginalSource))
                    return;
     
                DataGridRow item = e.OriginalSource as DataGridRow;
                if (item != null)
                    item.BringIntoView();
     
            }
        }
    le xaml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <DataGrid.ItemContainerStyle>
    	<Style TargetType="{x:Type DataGridRow}">
    		<Setter
    			Property="local_Views:DatagridItemBehavior.IsBroughtIntoViewWhenSelected"
    			Value="True" />
    	</Style>
    </DataGrid.ItemContainerStyle>

    Le problème est qu'il ne rentre dans mon événement que quand je scroll vers l'objet sélectionné.

    Ce qui n'est pas vraiment intéressant au final, aurirez-vous une idée ?

Discussions similaires

  1. mettre le focus sur une ligne de listbox
    Par Nako_lito dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/06/2009, 10h46
  2. Recherche dans Grid et focus sur une ligne dans grid
    Par angelevil dans le forum Windows Forms
    Réponses: 1
    Dernier message: 29/05/2009, 00h37
  3. [JTable] maintien du focus sur une ligne
    Par rednik dans le forum Composants
    Réponses: 3
    Dernier message: 20/08/2008, 17h37
  4. Excel et focus sur une ligne
    Par Mom's dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/04/2008, 15h23
  5. [WD5.5]Focus sur une ligne d'une table
    Par roms19 dans le forum WinDev
    Réponses: 3
    Dernier message: 27/06/2007, 17h34

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