У меня проблема с классом, который расширяет ListBox
в Windows Phone 7 Silverlight. Идея состоит в том, чтобы иметь полный ScrollViewer
(черный, например, заполняет весь экран телефона) и чтобы ItemsPresenter
(красный) имел поле (зеленый). Это используется для создания поля вокруг всего списка, но полосы прокрутки начинаются с верхнего правого края и заканчиваются в правом нижнем углу темного прямоугольника:
Проблема в том, что 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, и он работает, как ожидалось, но без виртуализации
Обновление 2 Добавлены образцы изображений. Полосы прокрутки синего цвета, чтобы показать их положение.
Ожидаемые результаты (используйте StackPanel
вместо VirtualizingStackPanel
):
Correct_01: полоса прокрутки вверху
Correct_01: полоса прокрутки посередине
Correct_01: полоса прокрутки внизу
Неправильные примеры:
Wrong_01: Поле всегда видно (пример: середина позиции прокрутки)
Единственное решение - добавить фиктивный элемент в конец списка для компенсации поля. Я попытаюсь динамически добавить этот фиктивный элемент в логику управления ... Добавьте логику в привязанный ObservableCollection
, иначе модель представления не подходит.
ОБНОВЛЕНИЕ: Я добавил свое окончательное решение как отдельный ответ. Оформить заказ на класс ExtendedListBox .