2012-05-25 1 views
2

У меня есть следующие сетки:ListBox в Grid Row с автоматической высотой. Scrollbar не работает

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 
    <Border Height="50" Background="Gainsboro" Grid.Row="0"/> 
    <Border Background="AliceBlue" Grid.Row="1"> 
     <ListBox ScrollViewer.VerticalScrollBarVisibility="Auto" ItemsSource="asdasdfasdf3dfasdf"/> 
    </Border> 
    <Border Height="60" Background="Aquamarine" Grid.Row="3"/> 
</Grid> 

Почему ScrollViewer ListBox является не включен? Последняя граница выталкивается из окна. Если я установил Grid.Row 2 Height на * star - он работает красиво. Возможно ли иметь listbox с scrollviewer в строке сетки высот?

ответ

2

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

* делает ваш контроль за доступным размером, и он не растет дальше этого.

Что вам нужно сделать, это либо определить MaxHeight свойство для ListBox или использовать * как высота в RowDefinition.

+0

Я боялся, что вы подтвердите мою презумпцию. Звезда не хороша, потому что она делает границу со списком больше, чем необходимо. MaxHeight отлично работает, но чтобы заполнить все свободное пространство, мне приходится делать вычисления в коде за каждый раз, когда изменяется размер окна. Я хотел избежать этого, но это кажется неизбежным;) – Joe

Смежные вопросы