【发布时间】:2016-05-26 15:25:26
【问题描述】:
我有一个显示两个滚动条的 ListView。为了实现这一点,我将 ListView 放在位于 Grid 中的 Border 中,如下所示:
<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 不会调整大小,而是保持恒定的 height=370。
我知道我可以将其设置为 370*,但在这种情况下,我的列表将调整大小以适合所有项目。我想限制这一点,以便仅在用户调整表单大小时才发生调整大小。因此,如果有更多项目,ListView 应该显示滚动条,并且当用户调整表单大小时,如果将表单调整到可以容纳 ListView 中所有项目的高度,那么滚动条应该消失。
更新: 我没有将高度硬编码为 370 以上,而是尝试将高度设置为 、Auto 和 370。所有这些都会扩展 ListView(因此也扩展表单)以容纳 ListView 中的所有项目。
更新 2: 更新了 XAML 以显示整个树结构。
更新 3: 根据 Rachel 的建议,在 XAML 的上述注释行中将硬编码 370 设置为“*”,这会产生调整大小的表单,以便 ListView 适合其中的所有项目。我添加了显示表单打开时的屏幕截图和显示表单打开时的外观的屏幕截图。如您所见,它会调整高度以适应所有项目。
我需要的是表单和 ListView 保持其设置的大小,并且只有在用户调整表单大小时才调整大小。
【问题讨论】:
-
将 370 更改为
*,也许只使用 370 作为 MinHeight。 -
我正在经历它。请注意:虽然 Grid 设计为不可见,但您可以将 Grid.ShowGridLines 属性设置为 true 以方便调试,这有助于可视化列宽和行高,并帮助您了解 Grid 如何将自身细分为更小的区域。
-
我将您的 XAML 复制/粘贴到一个新应用程序中,如果您使用
*而不是370,它似乎工作正常。你能再试一次,给我们看一下结果的截图吗?<RowDefinition Height="*"/>对我来说最终看起来像 this。如果这不是您要找的,也许我误解了这个问题? -
@dbnex14 对不起,我仍然认为我不明白问题所在。您是说由于 ListView 导致表单加载的尺寸过大吗?如果是这种情况,请从
<Window>标记中删除SizeToContent="Height",因为它使窗口等于内容的任何高度,其中包括完整大小的 ListView。 -
@dbnex14 好的,将其发布为答案:)
标签: wpf xaml listview scrollbar