Silverlight: растягивание до оставшегося пространства в StackPanel
у меня есть вертикальная StackPanel с двумя элементами: кнопка и список. Как я могу растянуть список до оставшейся высоты страницы?
<StackPanel Height="Auto" Width="Auto">
<Button Height="30" Width="100" Content="Get Content" x:Name="GetContent"/>
<ListBox Height="Auto" Width="Auto" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
</StackPanel>
обратите внимание, что я получил это для работы с помощью контейнера сетки:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button Width="100" Height="30" Content="Get Content" Click="OnGetContent" Grid.Row="0" Grid.Column="0"/>
<data:DataGrid x:Name="MyContent" Margin="0,5" Grid.Row="1" Grid.Column="0"/>
</Grid>
4 ответов
Ну, вы уже нашли решение ;) StackPanels не будет заполнять оставшееся пространство по умолчанию, потому что их размер всегда равен объединенному требуемому размеру их дочерних элементов. Grid-отличный способ, потому что он будет динамически изменять размер при изменении размера браузера. Ответ марка на использование DockPanel тоже отлично работает. Единственный другой метод-вручную изменять размер элементов при изменении размера родительского элемента управления. Вообще до конца, ручка с решетками для наружного макет и они заполняют их с StackPanels и другие элементы управления, и вы должны быть установлены.
можно использовать DockPanel
. Установите первый элемент в dock top, а второй-в Dock fill или используйте LastChildFill
свойства:
<toolkit:DockPanel LastChildFill="True"
xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit">
<Button DockPanel.Dock="Top" Height="30" Width="100"
Content="Get Content" x:Name="GetContent"/>
<ListBox Background="Azure" />
</toolkit:DockPanel>
Я согласен с замечанием Джеймса, что " StackPanels по умолчанию не заполнит оставшееся пространство, потому что их размер всегда равен объединенному требуемому размеру их дочерних элементов.- Именно так и происходит, но это не ожидаемый результат.
Я понимаю, почему эта инструкция сжимает содержимое в наименьшее необходимое пространство.
<StackPanel Height="Auto" Width="Auto">
однако... StackPanel принимает аргумент HorizontalAlignment , который при выборе должен вызвать панель стека для заполнения содержимого родительского контейнера. Это именно то, что происходит, когда вы устанавливаете Orientation="Vertical". Обратите внимание, что в этом случае StackPanel определит, сколько горизонтального пространства доступно и выделено дочерним элементам управления.
<StackPanel Height="30" Orientation="Vertical" HorizontalAlignment="Stretch" >
<TextBox /> <!--TextBox fills entire space-->
</StackPanel>
его только тогда, когда ориентация= "горизонтальная", что горизонтальный дочерний размер ломается.
<StackPanel Height="30" Orientation="Horizontal" HorizontalAlignment="Stretch" >
<TextBox /> <!--TextBox fills smallest space available-->
</StackPanel>