7
votes

Comment relier la barre de défilement et ScrollViewer

J'ai actuellement deux vues alternées de ScrollViewer contenant de la même collection. J'ai lié le défilement des deux huissiers de défilement ensemble en manipulant l'événement ScrollChanged et en utilisant ScrollToverticalOffetSetSet.

Pour des raisons de présentation, j'ai défini à la fois des barres de défilement ScrollViewer sur Caché et souhaitez les contrôler à partir d'une barre de défilement séparée.

Cela semble ne pas être simple. Je me souviens de voir un blog à ce sujet il y a quelques mois, mais je ne peux plus le trouver.

Quelqu'un peut-il me dire dans la direction de certaines ressources utiles ou me donner une poussée dans la bonne direction de la manière dont cela pourrait être atteint.

Merci d'avance.


0 commentaires

3 Réponses :


8
votes

OK, résolu ceci. Était en fait assez simple.

ont depuis trouvé WPF reliure à une fonction , qui devrait aider quelqu'un d'autre intéressé . Son VB mais devrait être suffisamment clair.

acclamations

Suite à ci-dessus: I Scroll de la barre de défilement et passés dans la vision de ScrollViewer, je voulais lier. Semble fonctionner ok. xxx


0 commentaires

15
votes

génial, juste ce dont j'avais besoin. J'ai étendu un peu de sorte que la vision de ScrollViewer puisse être définie à partir de XAML en utilisant une propriété de dépendance. Dans xaml: xxx

code: xxx


3 commentaires

Comment puis-je lier la barre de liaison à un élément de modèle une fois que le modèle est appliqué? Mon autre ScrollViewer n'existe pas encore lorsque la barre de défilement liée est créée, l'élément n'est donc pas lié.


Serait-ce une meilleure idée de définir largechange = 0,1 * maximum; et smallchange = 0,02 * maximum; au lieu d'utiliser des valeurs codées strictes?


@Jamesjoshuasteet Vous pouvez vous abonner à un événement puis vous désabonner. Par exemple, dans mon cas, j'essaie de lier à un DataGrid , où ScrollViewer n'existe pas au moment de la liaison. Dans OnboundDataGridPropertyChanged i Bind to Chargé Evénement: ((Datagramrid) E.Newvalue). Chargé + = expéditeur.onboundTablineded; . Ensuite, dans OnboundTaBlakeLoaded , je me désabonne OnboundTablineded de celui-ci.



0
votes

Je fais quelque chose de beaucoup plus simple, voici:

J'ai 2 listviews: Les deux implémentent l'événement "ScrollViewer.scrollchanged": p>

public class DependencyObjectFunctions
{
    public static DependencyObject GetChildOfType<T>(DependencyObject o)
    {
        // Return the DependencyObject if it is a Type T (ScrollViewer in my case)
        if (o is T)
        { return o; }

        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(o); i++)
        {
            var child = VisualTreeHelper.GetChild(o, i);

            var result = GetChildOfType<T>(child);
            if (result == null)
            {
                continue;
            }
            else
            {
                return result;
            }
        }
        return null;
    }
}


0 commentaires