首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF XAML ListView与ScrollBars

WPF XAML ListView与ScrollBars
EN

Stack Overflow用户
提问于 2016-05-26 15:25:26
回答 3查看 2.9K关注 0票数 0

我有一个ListView,它显示两个滚动条。为此,我将ListView放在网格中的边界中,如下所示:

代码语言:javascript
复制
<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中所有项的高度,该滚动条就会消失。

更新:我尝试将高度设置为、Auto和370,而不是硬编码上面的370。所有这些都将扩展ListView (因此也包括表单),以容纳ListView中的所有项。

更新2:更新XAML以显示整个树结构。

更新3:按照瑞秋的建议,将上面注释行中的硬编码370XAML设置为"*“,这会产生调整表单的大小,从而使ListView适合其中的所有项目。我添加了屏幕截图,显示表单打开时的样子,以及显示打开时应该是什么样子的截图。正如你所看到的,它可以调整大小来容纳所有的信息。

我需要的是表单和ListView保持它们的设置大小,并且只有当用户调整表单大小时才调整大小。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-27 13:38:45

如果我正确理解您的问题,您是说表单加载太大了,因为ListView正在增长到它的高度。如果是这样的话,从SizeToContent="Height"标记中删除<Window>,因为它使窗口的初始高度等于该内容的任何高度,其中包括全尺寸的ListView

票数 2
EN

Stack Overflow用户

发布于 2021-06-03 06:27:22

通过设置ScrollViewer.VerticalScrollBarVisibility="Visible“& MaxHeight="700”滚动条,任何值都可以看到MaxHeight

票数 1
EN

Stack Overflow用户

发布于 2016-05-26 17:57:22

嗨,我想我理解你了。所以,我试着:

因此,您希望ListView的高度至少为370,如果窗口调整大小(窗口大小的增加和减小),则只有调整大小。

设置第二个RowDefinition的RowDefinition可能会有所帮助

代码语言:javascript
复制
<Grid Grid.Row="1">
        <Grid.RowDefinitions>
            <RowDefinition Height="32"/>
            <RowDefinition MinHeight="370"/>  <!-- THIS IS HARDCODED....-->
        </Grid.RowDefinitions>
.....
</Grid>

谢谢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37465077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档