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 :

Scrollbar - Listbox WPF - La forcer à rester dans le fond [Débutant]


Sujet :

Windows Presentation Foundation

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2013
    Messages : 8
    Par défaut Scrollbar - Listbox WPF - La forcer à rester dans le fond
    Bonjour;

    Je vous expose mon problème ( j'espère que c'est la bonne section ), et avant tout, je tiens à m'excuser si le problème à déjà été résolu, j'ai chercher, et je n'ai pas trouver.



    Bon, c'est parti.

    Je crée un petit tchat, tout fonctionne bien, excepté une chose... La scrollbar ne suit pas les éléments de la ListBox ( binding ).

    J'ai ceci :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <ListBox Height="425" HorizontalAlignment="Left" Margin="255,35,0,0" Name="listBox2" VerticalAlignment="Top" Width="611" Foreground="#FF8D3B05" FontSize="15" BorderBrush="Black" ItemsSource="{Binding ListeMessage}" SelectedItem="{Binding SelectedItem}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Margin="0,5,0,5">
                            <TextBlock Foreground="Green" Text="{Binding Date}" />
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Foreground="Orange" Text="{Binding Auteur}" />
                                <TextBlock Foreground="black" Text=" : " />
                                <TextBlock Foreground="Black" Text="{Binding Message}" />
                            </StackPanel>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>


    J'ai pourtant bien la propriété SelectedItem ( qui normalement, devrais obliger la scrollbar à "descendre'.... Mais rien.

    J'ai ceci également :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private TMessage _SelectedItem;
            public event PropertyChangedEventHandler PropertyChanged;

    Code c# : 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
            public TMessage SelectedItem
            {
                get
                {
                    return _SelectedItem;
                }
                set
                {
                    if (_SelectedItem != value)
                    {
                        _SelectedItem = value;
                        if (PropertyChanged != null)
                        {
                            PropertyChanged(this, new PropertyChangedEventArgs("SelectedItem"));
                        }
                    }
                }
            }


    Y a t'il une propriété pour "forcer" la scrollbar de rester dans le fond? ( mais je dois également pouvoir la remonter pour voir par exemple, des anciens messages )

    Merci d'avance pour vos futures réponses.

    Et si jamais je me suis tromper de section et/ou que le sujet existait déjà, pas de fessées plz :'(

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

    Informations forums :
    Inscription : Juillet 2010
    Messages : 52
    Par défaut
    Bonjour,
    Bon il y'a une réponse sur stackoverflow (qui est hs actuellement chez moi)

    En bref cela consiste à mettre un behavior sur le listboxitem afin de le ramener dans la vue lorsque celui-ci est sélectionné.

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

    Code c# : 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
     
    public static class ListBoxItemBehavior
    {
        #region IsBroughtIntoViewWhenSelected
     
        public static bool GetIsBroughtIntoViewWhenSelected(ListBoxItem listBoxItem)
        {
            return (bool)listBoxItem.GetValue(IsBroughtIntoViewWhenSelectedProperty);
        }
     
        public static void SetIsBroughtIntoViewWhenSelected(
          ListBoxItem listBoxItem, bool value)
        {
            listBoxItem.SetValue(IsBroughtIntoViewWhenSelectedProperty, value);
        }
     
        public static readonly DependencyProperty IsBroughtIntoViewWhenSelectedProperty =
            DependencyProperty.RegisterAttached(
            "IsBroughtIntoViewWhenSelected",
            typeof(bool),
            typeof(ListBoxItemBehavior),
            new UIPropertyMetadata(false, OnIsBroughtIntoViewWhenSelectedChanged));
     
        static void OnIsBroughtIntoViewWhenSelectedChanged(
          DependencyObject depObj, DependencyPropertyChangedEventArgs e)
        {
            ListBoxItem item = depObj as ListBoxItem;
            if (item == null)
                return;
     
            if (e.NewValue is bool == false)
                return;
     
            if ((bool)e.NewValue)
                item.Selected += OnListBoxItemSelected;
            else
                item.Selected -= OnListBoxItemSelected;
        }
     
        static void OnListBoxItemSelected(object sender, RoutedEventArgs e)
        {
            // Only react to the Selected event raised by the ListBoxItem
            // 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;
     
            ListBoxItem item = e.OriginalSource as ListBoxItem;
            if (item != null)
                item.BringIntoView();
        }
     
        #endregion // IsBroughtIntoViewWhenSelected
    }

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2013
    Messages : 8
    Par défaut
    Merci beaucoup pour ta réponse rapide;

    je n'avais pas trouver de solution ( et ça fait 3j que je cherches ^^', donc je me suis voué a demander )

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

Discussions similaires

  1. [HTTP] Rester dans la même session après envoi du login
    Par lazare dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 06/07/2007, 08h00
  2. Rester dans la legalite
    Par Oncle_Pete dans le forum Delphi
    Réponses: 5
    Dernier message: 20/10/2006, 21h36
  3. [vba E] Scrollbar listbox
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 26/07/2006, 22h33
  4. Réponses: 12
    Dernier message: 22/12/2005, 09h22
  5. forcer majuscules dans un where
    Par bobic dans le forum Oracle
    Réponses: 3
    Dernier message: 08/12/2005, 10h59

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