#silverlight #silverlight-4.0 #scroll
#silverlight #silverlight-4.0 #прокрутка
Вопрос:
У меня есть приложение Silverlight, которое выполняет навигацию между страницами. Каким-то образом браузер, похоже, запоминает последнее прокрученное местоположение страницы, так что, когда я возвращаюсь на страницу, я возвращаюсь в то же местоположение.
Например: На
странице 1 есть список поиска, на
странице 2 есть подробная информация со ссылкой внизу страницы обратно на список поиска
Если страница 2 превышает высоту браузера, вызывая вертикальные полосы прокрутки, когда я выбираю элемент отправки из списка на странице 1, страница 2 отображается правильно, но прокручивается до нижней части страницы, где была ссылка.
Как я могу заставить страницу браузера вернуться к началу страницы?
Существует ли решение MVVM, а не решение javascript на странице XAML?бывают случаи, когда я хочу, чтобы местоположение не менялось
Ответ №1:
ScrollViewer переносит два элемента управления полосой прокрутки для вертикальной и горизонтальной полос прокрутки. Вертикальная полоса прокрутки имеет свойство «Value», которое имеет привязку TemplateBinding к VerticalOffset , которое, как я полагаю, задает местоположение. это свойство Scrollviewer. К сожалению, это не свойство зависимости, поэтому вы не можете привязаться к нему непосредственно в вашей виртуальной машине. В ScrollViewer действительно есть метод с именем ScrollToVerticalOffset , и там вы можете указать местоположение. Если вам действительно нужна логика в вашей виртуальной машине, вы могли бы попытаться написать пользовательский шаблон для ScrollViewer и привязать свойство Value в вашей полосе прокрутки к вашей виртуальной машине.
Комментарии:
1. Вероятно, это не лучшее место для этого, но, похоже, я не могу прокомментировать ваш ответ. Откуда берется метод scrollToTop()? Я не вижу этого в документации msdn, и, похоже, я также не могу найти это в своих ScrollViewers.
2. Элементы управления Silverlight 4.3 msdn.microsoft.com/en-us/library / …
Ответ №2:
Я нашел способ сделать это с помощью решения, состоящего из 3 частей:
1) на главной странице xaml добавьте загруженное событие
<ScrollViewer ... Loaded="ScrollViewer_Loaded">
2) в коде, лежащем в основе страницы xaml.cs, сохраните ссылку в глобальной переменной
private void ScrollViewer_Loaded(object sender, System.Windows.RoutedEventArgs e)
{ gContentScroll = (ScrollViewer)sender; }
3) в любом другом месте вы можете получить доступ к этому глобальному файлу по мере необходимости, например, в SomeOtherViewModel.cs
Во время инициализации OnLoad
...
gContentScroll.ScrollToVerticalOffset(0);
...