2012-03-02 3 views
1

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

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

Благодаря Том

+0

Под «физической, а не логический», вы используя «логический», чтобы ссылаться на виртуализацию пользовательского интерфейса? Если вам, вас может заинтересует этот вопрос: [Виртуализация элемента управления ItemsControl] (http://stackoverflow.com/q/2783845/302677) – Rachel

ответ

0

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

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

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

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

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

Я надеюсь, что этот вопрос решается в WPF 4,5

Вот пример наличия Виртуализация pabel с Pixel Based прокруткой по умолчанию:

public class VSP : VirtualizingStackPanel 
{ 
    public VSP() 
    { 
     typeof(VSP).GetProperty("IsPixelBased", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(this, true, null); 
    } 
} 
Смежные вопросы