【问题标题】:WPF XAML ListView with ScrollBars带有滚动条的 WPF XAML ListView
【发布时间】: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,它似乎工作正常。你能再试一次,给我们看一下结果的截图吗? &lt;RowDefinition Height="*"/&gt; 对我来说最终看起来像 this。如果这不是您要找的,也许我误解了这个问题?
  • @dbnex14 对不起,我仍然认为我不明白问题所在。您是说由于 ListView 导致表单加载的尺寸过大吗?如果是这种情况,请从 &lt;Window&gt; 标记中删除 SizeToContent="Height",因为它使窗口等于内容的任何高度,其中包括完整大小的 ListView。
  • @dbnex14 好的,将其发布为答案:)

标签: wpf xaml listview scrollbar


【解决方案1】:

如果我正确理解您的问题,您是说表单加载的尺寸太大,因为 ListView 正在增长到它的全高。如果是这种情况,请从&lt;Window&gt; 标记中删除SizeToContent="Height",因为它使窗口的初始高度等于内容的任何高度,其中包括完全大小的ListView

【讨论】:

    【解决方案2】:

    通过设置 ScrollViewer.VerticalScrollBarVisibility="Visible" & MaxHeight="700" 滚动条将可见 MaxHeight 为任意值

    【讨论】:

      【解决方案3】:

      嗨,我想我已经理解你了。所以,我正在尝试:

      因此,您希望 ListView高度 至少为 370,然后仅在 窗口 调整大小 strong> resizedwindow 大小的递增和递减)。

      设置 2nd RowDefinition 的 MinHeight 可能会有所帮助

      <Grid Grid.Row="1">
              <Grid.RowDefinitions>
                  <RowDefinition Height="32"/>
                  <RowDefinition MinHeight="370"/>  <!-- THIS IS HARDCODED....-->
              </Grid.RowDefinitions>
      .....
      </Grid>
      

      谢谢。

      【讨论】:

      • 对不起,这不起作用。这只是设置 MinHeight。我用一些截图更新了我的问题来解释。
      • 你说 我需要的是表单和 ListView 保持它们的设定大小并且只有在用户调整表单大小时才调整大小。 所以,minheight 应该工作,ListView 将只有 370 并且它的大小会随着表单大小的增加而增加,反之亦然。当减小时,ListView 的最小高度将为 370(您设置的大小)。
      • @MrTop 谢谢,但雷切尔的回答解决了这个问题。非常感谢您的努力。
      猜你喜欢
      • 1970-01-01
      • 2019-06-19
      • 2011-02-19
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多