Используя Silverlight 4 с MVVM, как я могу программно прокрутить страницу до верха

#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);
...