Margin on ItemsControl виртуализации ListBox не работает должным образом

У меня проблема с классом, который расширяет ListBox в Windows Phone 7 Silverlight. Идея состоит в том, чтобы иметь полный ScrollViewer (черный, например, заполняет весь экран телефона) и чтобы ItemsPresenter (красный) имел поле (зеленый). Это используется для создания поля вокруг всего списка, но полосы прокрутки начинаются с верхнего правого края и заканчиваются в правом нижнем углу темного прямоугольника:

enter image description here

Проблема в том, что ScrollViewer может 'не прокручивается до самого конца, он отрезает 50 пикселей от последнего элемента в списке. Если я использую StackPanel вместо VirtualizingStackPanel , поля верны, НО список больше не виртуализируется.

Спасибо за любые идеи, я много пробовал, но ничего не работает. Это ошибка элемента управления?

РЕШЕНИЕ: Используйте свойство InnerMargin элемента управления ExtendedListBox из библиотеки MyToolkit !

C #:

public class MyListBox : ListBox
{
    public MyListBox()
    {
        DefaultStyleKey = typeof(MyListBox);
    }
}

XAML (например, App.xaml):



    
        
            
                    
                
            
        
    

    ...
 

Обновление 1

Я создал простой пример приложения: полоса прокрутки не может прокручиваться в конце ... Если вы измените VirtualizingStackPanel - StackPanel в App.xaml, и он работает, как ожидалось, но без виртуализации

SampleApp.zip

Обновление 2 Добавлены образцы изображений. Полосы прокрутки синего цвета, чтобы показать их положение.

Ожидаемые результаты (используйте StackPanel вместо VirtualizingStackPanel ):

Correct_01: полоса прокрутки вверху

enter image description here

Correct_01: полоса прокрутки посередине

enter image description here

Correct_01: полоса прокрутки внизу

enter image description here

Неправильные примеры:

Wrong_01: Поле всегда видно (пример: середина позиции прокрутки)

enter image description here

Единственное решение - добавить фиктивный элемент в конец списка для компенсации поля. Я попытаюсь динамически добавить этот фиктивный элемент в логику управления ... Добавьте логику в привязанный ObservableCollection , иначе модель представления не подходит.

ОБНОВЛЕНИЕ: Я добавил свое окончательное решение как отдельный ответ. Оформить заказ на класс ExtendedListBox .

9
задан 15 revs, 2 users 100% 23 March 2014 в 10:23
поделиться