Pergunta

Eu tenho um grupo de controles de usuário (cerca de 15, um para cada registro) em um Stackpanel que se estende pela minha página. Coloquei isso em um scrollViewer para que o usuário não precisasse rolar o navegador, mas, em vez disso, pode simplesmente rolar o painel ScrollViewer.

Alguém sabe como rolar programaticamente para um controle específico do usuário no meu painel de pilha. Eu quero um suspensão no topo TOI representar cada registro para que, quando selecionado, o visualizador de rolagem rola para esse controle do usuário.

Alguma ideia? Vejo que o scrollViewer possui um método scrollToverticeffset (), mas não sei como calcularia o deslocamento desses controles no Stackpanel.

Obrigado!

Foi útil?

Solução

Eu imagino que algo como o seguinte funcionaria:

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);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top