Есть ли способ убедиться, что Silverlight ScrollViewer сохраняет верхний элемент полностью видимым - PullRequest
1 голос
/ 23 сентября 2011

В Silverlight 4 есть способ, которым всякий раз, когда вы нажимаете на ScrollViewer (т. Е. Нажимаете полосу прокрутки в области рядом с большим пальцем), любой элемент в верхней части полностью виден.Мне все еще нужно, чтобы он плавно перемещался при перетаскивании большого пальца или использовании колесика мыши.

Моему клиенту не нравится, что элемент разрезается пополам, когда он перелистывает список, потому что он разрезается пополам как в верхней части, так и в нижней части.Я предложил какой-то встроенный свиток, и ему это не понравилось.Он хочет, чтобы он продолжал плавно прокручиваться, если не нажимать вверх или вниз.

Редактирование

Вот в чем подвох.Предметы не одного размера.Поэтому я должен обнаружить элемент, находящийся в верхней части окна просмотра прокрутки, и прокрутить его в поле зрения.Есть ли простой способ сделать это?

1 Ответ

1 голос
/ 23 сентября 2011

Первое, что вам нужно сделать, это выкопать вертикальную полосу прокрутки из внутренних органов ScrollViewer.Вы можете сделать это с помощью VisualTreeHelper.В различных блогах есть несколько маленьких кусочков кода, которые делают его использование еще проще.Я рекомендую это VisualTreeEnumeration (но я бы не стал).С этим классом расширений вы можете получить вертикальную полосу прокрутки:

ScrolBar vertSB = someScrollViewer.Descendents()
                                  .OfType<ScrollBar>()
                                  .FirstOrDefault(sb => sb.Name = "VerticalScrollBar");

Теперь вы можете присоединиться к событию Scroll и определить тип прокрутки, который произошел следующим образом:

...