Хороший вопрос. Я не нашел способа сделать это напрямую, но подошел довольно близко, посмотрев на проект элементов управления Silverlight (в некоторых классах они используют scrollviewer для элемента управления элементами). Вот как вы можете получить его, но для этого требуется собственный список:
public class TestBox : ListBox
{
private ScrollViewer _scrollHost;
protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
{
var itemsHost = VisualTreeHelper.GetParent(element) as Panel;
for (DependencyObject obj = itemsHost; obj != item && obj != null; obj = VisualTreeHelper.GetParent(obj))
{
ScrollViewer viewer = obj as ScrollViewer;
if (viewer != null)
{
_scrollHost = viewer;
break;
}
}
base.PrepareContainerForItemOverride(element, item);
}
}
Возможно, существует другой способ подключиться к этому событию (или другой способ получить эту панель). Если вы посмотрите на шаблон для ListBox, вы увидите, что средство просмотра прокрутки фактически называется «ScrollViewer», однако метод GetTemplateChild защищен, так что вам все равно нужно будет создать собственный класс.