Silverlight: сделать ListBox достаточно большим, чтобы вместить весь контент? - PullRequest
1 голос
/ 23 ноября 2010

У меня есть ListBox с достаточным количеством элементов, что делает вертикальную полосу прокрутки видимой. Как сделать так, чтобы окно списка автоматически увеличивалось по высоте, чтобы оно могло отображать все элементы одновременно, без прокрутки?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 24 ноября 2010

Проблема в том, что в основе шаблона ListBox лежит этот Xaml: -

<Border CornerRadius="2" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
    <ScrollViewer x:Name="ScrollViewer" Padding="{TemplateBinding Padding}" Background="{TemplateBinding Background}" BorderBrush="Transparent" BorderThickness="0" TabNavigation="{TemplateBinding TabNavigation}">
        <ItemsPresenter />
    </ScrollViewer>
</Border>

ScrollViewer делает то, что вы хотите сделать, довольно сложно. Решение состоит в том, чтобы (при условии, что вам действительно нужен ListBox , в частности) повторно шаблонировать ListBox. Настройте вышеуказанную часть шаблона так: -

<Border CornerRadius="2" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">
    <ItemsPresenter />
</Border>

Возможно, вы также захотите использовать StackPanel в качестве панели предметов.

Однако, если вам не нужны функции выбора ListBox, тогда простой ItemsControl сделает это.

0 голосов
/ 23 ноября 2010

Вы должны убедиться, что его контейнер даст достаточно места. Если контейнер для ListBox - это Grid с фиксированной шириной и высотой, тогда он даст ListBox фиксированный размер. Когда высота элементов превысит этот размер, полоса прокрутки станет видимой. Если вы поместите ListBox в StackPanel, StackPanel даст ListBox бесконечный размер. Вы все еще должны убедиться, что размер StackPanel не ограничен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...