SL 4: ScrollViewer - RequestBringIntoView - PullRequest
       25

SL 4: ScrollViewer - RequestBringIntoView

0 голосов
/ 28 января 2012

Как найти компонент в ScrollViewer, который обрабатывает событие RequestBringIntoView?
Он не отображается на двух частях ScrollBar (во всяком случае, не напрямую).
Спасибо за любые указатели ...

ОБНОВЛЕНИЕ: Связанный: Могу ли я получить ScrollContentPresenter часть ScrollViewer? Как?
Спасибо -

Увеличенное изображение:
У нас есть большой холст, содержащийся в ScrollViewer. Во время выполнения произвольное количество UserControls (я буду называть их «Blobs») добавляются на холст из базы данных. Их позиция и содержание взяты из БД. Пользователь может «выбрать» BLOB-объект, щелкнув по нему, и его внешний вид изменится, чтобы указать, что он выбран.
Если пользователь использует полосу прокрутки, чтобы переместить выбранный BLOB-объект вне поля зрения, а затем щелкает другой BLOB-объект, Canvas прокручивается, чтобы снова отображался ранее отсутствующий объект BLOB-объектов. Я предполагаю, что это связано с тем, что какой-то объект вызывает RequestBringIntoView, и ScrollViewer обрабатывает его.
Надеюсь, что это имеет смысл ...

Еще больше информации:
Добавлен обработчик (sb_ValueChanged) в событие ValueChanged полосы прокрутки Scrollviewer. Вот стек от щелчка мыши, который ускоряет прокрутку:

OurControl.sb_ValueChanged () System.Windows.dll! System.Windows.Controls.Primitives.RangeBase.OnValueChanged () System.Windows.dll! System.Windows.Controls.Primitives.ScrollBar.OnValueChanged () System.Windows. Dll! System.Windows.Controls.Primitives.RangeBase.OnValuePropertyChanged () System.Windows.dll! System.Windows.DependencyObject.RaisePropertyChangeNotifications ()
System.Windows.dll! System.Windows.DependencyObject.UpdateEffectiveValue () System.Windows.dll! System.Windows.DependencyObject.SetValueInternal () System.Windows.dll! System.Windows.DependencyObject.SetValue () System.Windows.dll! System.Windows.Controls.ScrollViewer.InvalidateScrollInfo () System.Windows.dll! System.Windows.Controls.ScrollContentPresenter.VerifyScrollData ()
System.Windows.dll! System.Windows.Controls.ScrollContentPresenter.ArrangeOverride () System.Windows.dll! System.Windows.FrameworkElement.ArrangeOverride ()

Если бы я только мог узнать, что на самом деле является FrameworkElement, который запускает беду ...

1 Ответ

0 голосов
/ 30 января 2012

Извините ... кажется, что он не существует, как в WPF. Проверьте эту ссылку для удобного решения.

Обновление : Ладно ... для этого вам может понадобиться пройтись по визуальному дереву и выполнить какой-то рекурсивный поиск. Однако, если вы используете шаблон по умолчанию для scrollviewer , как показано здесь , вы можете напрямую запросить ScrollContentPresenter примерно так:

var BorderChild = VisualTreeHelper.GetChild(MyScrollViewer, 0);
var GridChild = VisualTreeHelper.GetChild(BorderChild, 0);
var ScrollContentPresenterChild = VisualTreeHelper.GetChild(GridChild, 0);
...