#c# #.net #wpf
Вопрос:
У меня есть простое приложение с тремя столбцами в окне. В средней колонке у меня есть компонент списка.
Я хочу, чтобы список растягивался на всю высоту столбца, но также был доступен для прокрутки, когда в нем много всего. Прямо сейчас его нельзя прокручивать. Я могу исправить это, добавив Height
к нему (например Height="300"
) свойство, но тогда оно больше не будет растягиваться вместе со столбцом. Что мне делать?
<Window x:Class="UI.MainWindow"
<!-- window stuff -->
<Border Padding="10">
<StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" MinWidth="150" MaxWidth="200" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<!-- column 1 stuff -->
<StackPanel x:Name="LogLines" Grid.Column="1">
<StackPanel Orientation="Horizontal">
<Label>Search</Label>
<TextBox x:Name="Searchbox" Height="20" TextWrapping="Wrap" Text="TextBox" Width="120" />
<CheckBox x:Name="ErrorsOnlyCheckbox" HorizontalAlignment="Right">
Errors only
</CheckBox>
</StackPanel>
<ListBox
x:Name="LogLinesList"
ScrollViewer.CanContentScroll="True" />
</StackPanel>
<GridSplitter Grid.Column="1" Width="10" />
<!-- column 3 stuff -->
</Grid>
</StackPanel>
</Border>
</Window>
Ответ №1:
Контейнер ваш ListBox
есть StackPanel
. StackPanel
будет увеличиваться в отношении контроля над детьми. Вам следует использовать другой контейнер, попробуйте использовать Grid
вместо него
<Grid x:Name="LogLines" Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Width="Auto"/>
<RowDefinition Width="*" />
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" Grid.Row="0">
....
</StackPanel>
<ListBox Grid.Row="1"/>
</Grid>
Комментарии:
1. Я реализовал это, но в итоге все равно возникла проблема. Однако затем я заметил, что все мое окно было завернуто в панель стека. Я удалил эту ненужную панель стека, и проблема была устранена.
2. О, я не обратил внимания на вторую панель стека. В любом случае, я рад, что вы решили проблему.