#silverlight #telerik
#silverlight #telerik
Вопрос:
Я использую RadGridView Telerik в UserControl для отображения списка сообщений, полученных с XMPP-сервера. Я смог настроить его так, чтобы при получении сообщения я мог прокручивать до конца списка примерно так:
private GridViewScrollViewer scrollViewer;
void controller_OnMessageReceived(object sender, EventArgs e)
{
scrollViewer = receivedMessageList.ChildrenOfType<GridViewScrollViewer>().FirstOrDefault();
scrollViewer.ScrollToBottom();
}
Однако я хочу иметь возможность отключить автоматическую прокрутку, когда пользователь использует полосу прокрутки, а затем снова включить ее, когда он прокручивается до конца списка. Я думал, что смогу подключиться к ScrollChanged
событию, но, похоже, в нем недостаточно информации для использования.
В качестве небольшого дополнения к этому в Loaded
случае элемента управления и RadGridView вызов ScrollViewer, который я привел выше, имеет значение null. Я думал, что после загрузки элемента управления все элементы пользовательского интерфейса готовы?
Ответ №1:
Что касается нулевой переменной ScrollViewer, я думаю, когда вы загружаете элемент управления, ScrollViewer не отображается, поскольку в нем еще ничего нет. Попробуйте установить:
ScrollViewer.HorizontalScrollBarVisibility="Visible"
ScrollViewer.VerticalScrollBarVisibility="Visible"
В вашем XAML
Теперь о реальной проблеме:
вы можете отслеживать HorizontalOffset
и VerticalOffset
из scrollviewer:
Создайте два Double
поля в своем классе, чтобы сохранить их, а затем, перед вызовом ScrollToBottom()
, сравните текущие значения с сохраненными.
Если пользователь вручную переместил полосы прокрутки, значения будут другими, и вы не будете прокручивать, иначе вы ScrollToBottom()
.
Комментарии:
1. Изменение режима просмотра прокрутки на видимый не помогает. Я уверен, что в том, как был создан элемент управления, есть что-то, что вызывает это. Я подозреваю, что в конечном итоге это отследит. Мониторинг смещения звучит так, как будто это вполне может быть способом сделать это, однако, когда изменяется размер окна или списка, также изменяется смещение, поэтому я предполагаю, что это может включать мониторинг в разных местах. Но я думаю, это место для начала 🙂