Scrollviewer - логическая прокрутка с помощью itemscontrol - PullRequest
1 голос
/ 02 марта 2012

В приложении WPF у меня есть ScrollViewer, в котором есть ItemsControl, элементы которого привязаны к коллекции, и у меня есть шаблон, указанный для элементов. Я хочу, чтобы ScrollViewer использовал логическую прокрутку, поэтому я устанавливаю флаг ScrollViewer.CanContentScroll = "True" и устанавливаю шаблон ItemsPanel ItemsControl как StackPanel.

Однако, прокрутка все еще физическая, а не логическая. Что я делаю не так?

Спасибо Том

1 Ответ

0 голосов
/ 05 июля 2012

Извините за поздний ответ ... Это то, что Microsoft "добавила" в .Net 4.5 (Пиксельная прокрутка).

В WPF 4 TreeView имеет логическую прокрутку, но ListBox и ItemsControlне делает.Так как же это работает на TreeView, а не на ListBox?Это вопрос, который следует задать, поскольку прокруткой управляет VirtualizingStackPanel.

Хорошо, «секрет» находится во внутреннем свойстве VirtualizingStackPanel, которое называется IsPixelBased.

Если вы установите егок истине, тогда вы получите логическую прокрутку назад.

Однако, это имеет цену.Кажется, что с большим источником элементов (даже с виртуализацией и переработкой контейнеров) прокрутка идет медленно.(источник крупных предметов - 50 000 или 100 000), тогда как при физической прокрутке (на основе элементов) это не так.

Я надеюсь, что эта проблема решена в WPF 4.5

. Вот примерналичие виртуальной метки с прокруткой на основе пикселей по умолчанию:

public class VSP : VirtualizingStackPanel
{
    public VSP()
    {
        typeof(VSP).GetProperty("IsPixelBased", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(this, true, null);
    }
}
...