У меня есть ListView, который показывает полосы прокрутки. Чтобы достичь этого, я помещаю свой ListView в границах, расположенных в сетке, как показано ниже:WPF XAML ListView с ScrollBars
<Window ...
MinWidth="600" MinHeight="500" Width="800" Height="500"
Topmost="True"
WindowStartupLocation="CenterScreen"
SizeToContent="Height" WindowStyle="None">
<Window.Resources>
<ResourceDictionary>
...
</ResourceDictionary>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*" MinHeight="60"/>
<RowDefinition Height="48"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="10"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid Grid.Row="1">
<Grid.RowDefinitions>
<RowDefinition Height="32"/>
<RowDefinition Height="370"/> <-- THIS IS HARDCODED TO 370 BUT I NEED IT TO BE RESIZABLE
</Grid.RowDefinitions>
<Grid Margin="5,0,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="4"/>
<ColumnDefinition Width="346*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding MyName}" Grid.Column="1"
Style="{StaticResource MyNameStyle}" Margin="0,5,0,5" />
</Grid>
<Border BorderBrush="{StaticResource MyBrush}" Grid.Row="1" Grid.Column="0" >
<ListView
x:Name="lstMyListView"
Margin="0,0,0,0"
BorderBrush="Transparent"
ItemsSource="{Binding MyItems}"
SelectedIndex="0"
ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Auto">
...
...
</ListView>
...
...
</Border>
...
...
</Grid>
</Grid>
</Window>
Это все в форме, изменяемые. Поэтому ListView также должен изменять размер, но он должен делать это только тогда, когда пользователь изменяет размер формы. Проблема с моим жестким кодированным значением выше очевидна, ListView не будет изменять размер, но останется на постоянной высоте = 370.
Я знаю, что могу установить это на 370 *, но в этом случае мой список изменит размер, чтобы соответствовать всем элементам. Я хочу ограничить это, так что изменение размера происходит только тогда, когда пользователь изменяет размер формы. Таким образом, ListView должен показывать полосы прокрутки, если есть больше элементов, и по мере изменения размера пользователя эта полоса прокрутки должна уходить, если форма изменяется на высоту, которая может вместить все элементы в ListView.
UPDATE: Вместо жесткого кодирования высоту до 370 выше, я попытался установить высоту , Авто, и 370. Все это расширит ListView (и, следовательно, форму тоже), чтобы разместить все элементы в ListView.
ОБНОВЛЕНИЕ 2: Обновлен XAML, чтобы показать всю структуру дерева.
UPDATE 3: По предложению Рахили, установить жёстко 370 на «*» в комментировал строке выше в XAML и что производит формы с измененным размером, так что ListView подходит для всех элементов в нем. Я добавил скриншот, показывающий форму, когда она открывается, и снимок экрана, показывающий, как он должен выглядеть, когда он открывается. Как вы можете видеть, он изменяет размеры в высоту, чтобы разместить весь itesm.
Что мне нужно, так это то, что форма и ListView остаются в установленном размере и изменяются только в том случае, если пользователь изменяет размер формы.
Изменить 370 на '*' и, возможно, просто использовать 370 в качестве MinHeight. –
@ChrisW. Это не работает. Я уже пытался использовать 370 *, * и Auto.Все они будут расширять форму и ListView до размера, который учитывает все элементы в ListView. Очень ценится Крис – pixel
Возможно, я не понимаю ваше общее намерение. 370 * недействительно, * просто давайте использовать это пространство, Auto берет только то, что ему нужно. –