Как реализовать неуправляемый ItemsControl с записью «more ...», также известной как Paging Control? - PullRequest
2 голосов
/ 28 января 2010

Мне нужен элемент управления, который реализует обычную функциональность ItemsControl, со следующим поведением:

Если количество отображаемых элементов не помещается в доступное пространство, вместо отображения полосы прокрутки количество отображаемых элементов уменьшается, чтобы можно было уместить, при этом оставляя доступное пространство для «Больше ...» или « > элементы Когда количество элементов достаточно мало, раздел «Больше ...» становится невидимым. Поэтому, если вы динамически изменяете размер элемента управления, раздел «Еще ...» будет отображаться или исчезать в зависимости от размера.

Мне не нужно полное решение, просто направление, но я бы предпочел что-то «в духе WPF», максимально используя механизм компоновки. Кроме того, если вам случится узнать о существующем решении, это было бы здорово.

1 Ответ

0 голосов
/ 28 января 2010

В WPF и Silverlight ItemsControl может использовать подкласс VirtualizingPanel, который создает элементы UIE по запросу. Если вы реализуете свой собственный подкласс (вместо использования, например, VirtualizingStackPanel), который реализует интерфейс IScrollInfo, то, что вы можете сделать, это метод MeasureOverride(), вы можете заполнить видимую область как можно большим количеством элементов. поместите (минус 1) и поместите элемент «Еще ...» в конце.

Есть пара хороших постов в блоге о реализации ваших собственных VirtualizingPanel и IScrollInfo, но для начала у Дэна Кревье есть серия по реализации VirtualizingTilePanel:

http://blogs.msdn.com/dancre/archive/tags/VirtualizingTilePanel/default.aspx

В своем 4-м посте (последнем, который он написал) у него есть ссылка для загрузки исходного кода, который может оказаться полезным.

Тогда есть серия блогов Бена Констебла на IScrollInfo в http://blogs.msdn.com/bencon/archive/tags/Avalon+2F00+WPF/default.aspx

На прошлой неделе я сам использовал эти 2 ресурса, чтобы помочь мне реализовать классы VirtualizingPanel и VirtualizingStackPanel в Moonlight (это еще один ресурс, который вы можете просмотреть, если не боитесь использовать Subversion захватить svn: //anonsvn.mono-project.com/source/trunk/moon. Вы найдете мою реализацию VirtualizingStackPanel под луной / class / System.Windows / System.Windows.Controls / VirtualizingStackPanel.cs

Надеюсь, это поможет.

...