Question

J'ai un tas de contrôles utilisateur (environ 15, un pour chaque enregistrement) dans un StackPanel qui va en bas ma page. Je mis cela dans un ScrollViewer afin que l'utilisateur ne serait pas nécessaire de faire défiler le navigateur mais peut simplement faire défiler le panneau ScrollViewer.

Quelqu'un sait comment faire défiler programatically à un contrôle utilisateur spécifique dans mon panneau de pile. Je veux un menu déroulant en haut toi represetn chaque enregistrement de sorte que lorsque sélectionné les rouleaux des spectateurs de défilement pour que le contrôle de l'utilisateur.

ANY pensées? Je vois que le ScrollViewer a une méthode ScrollToVerticalOffset () mais je ne sais pas comment je calculais le décalage de ces contrôles dans le StackPanel.

Merci!

Était-ce utile?

La solution

J'imagine quelque chose comme ce qui suit fonctionnerait:

void ScrollToUserControl(UserControl uc)
{
    double amountToScroll = 0;
    for (int i = 0; i < stackPanel.Children.Count; i++)
    {
        if (stackPanel.Children[i] == uc)
            break;

        amountToScroll += stackPanel.Children[i].ActualHeight;

    }

    scrollViewer.UpdateLayout();
    scrollViewer.ScrollToVerticalOffset(amountToScroll);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top