Остановка автопрокрутки внизу списка - PullRequest
0 голосов
/ 21 октября 2011

Я использую RadrikridView Telerik в UserControl для отображения списка сообщений, полученных с сервера XMPP. Я смог установить его так, чтобы при получении сообщения я мог прокрутить до конца списка что-то вроде этого:

private GridViewScrollViewer scrollViewer;

void controller_OnMessageReceived(object sender, EventArgs e)
{
    scrollViewer = receivedMessageList.ChildrenOfType<GridViewScrollViewer>().FirstOrDefault();
    scrollViewer.ScrollToBottom();
}

Однако я хочу отключить автоматическую прокрутку, когда пользователь использует полосу прокрутки, а затем снова включить ее, когда прокручивает страницу вниз. Я думал, что смогу присоединиться к событию ScrollChanged, но, похоже, в нем недостаточно информации для использования.

В качестве небольшого дополнения к этому в событии Loaded элемента управления и RadGridView вызов scrollViewer, который я описал выше, становится нулевым. Я думал, что когда-то элемент управления был загружен, что все элементы пользовательского интерфейса готовы?

1 Ответ

0 голосов
/ 21 октября 2011

Насчет переменной null scrollViewer, я думаю, при загрузке элемента управления scrollViewer не отображается, поскольку в нем еще ничего нет. Попробуйте установить:

ScrollViewer.HorizontalScrollBarVisibility="Visible"
ScrollViewer.VerticalScrollBarVisibility="Visible"

В вашем XAML

Теперь для актуальной проблемы:
Вы можете контролировать HorizontalOffset и VerticalOffset прокрутки:

Создайте два поля Double в своем классе, чтобы сохранить их, а затем, перед вызовом ScrollToBottom(), сравните текущие значения с сохраненными.
Если пользователь вручную переместил полосы прокрутки, значения будут другими, и вы не будете прокручивать, в противном случае вы ScrollToBottom().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...