【问题标题】:WPF ListView ScrollbarsWPF ListView 滚动条
【发布时间】:2011-02-25 01:53:40
【问题描述】:

好的,我放弃了 - 如何在不为 xaml 中的 MaxHeight 指定硬编码值的情况下让垂直滚动条出现在列表视图中?

这是我的 xaml(我没有包含数据模型,但它基本上是一个目录列表)

<UserControl x:Class="WpfApplication1.Views.FolderViewView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="500" >
<DockPanel>
    <StackPanel DockPanel.Dock="Top">
        <Label Name="lblFolder" Content="{Binding Path=FolderName}" MinWidth="250"/>
        <Button Name="btnFolder" Content="Select Folder" Click="btnFolder_Click" />
    </StackPanel>
    <DockPanel>
        <ListView Name="lstFiles" ItemsSource="{Binding}" Margin="1" MaxHeight="200" Height="Auto" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto" >
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Filename" DisplayMemberBinding="{Binding Path=FileName}" />
                    <GridViewColumn Header="Extenstion" DisplayMemberBinding="{Binding Path=Extension}" />
                    <GridViewColumn Header="Size" DisplayMemberBinding="{Binding Path=FileSize}" />
                    <GridViewColumn Header="Creation Date" DisplayMemberBinding="{Binding Path=CreateDate}" />
                    <GridViewColumn Header="Modified Date" DisplayMemberBinding="{Binding Path=ModifiedDate}" />
                </GridView>
            </ListView.View>
        </ListView>
    </DockPanel>
</DockPanel>

如果不对ListView控件设置MaxHeight,当有足够的item使List view大于屏幕时,滚动条不会出现。 使用 MaxHeigt="250" 时,会出现滚动条,但现在当用户更改窗口大小时列表视图不会扩展。

也许我问错了问题,应该是:当窗口高度改变时,如何改变列表视图的最大高度?

请帮忙,这已经把我逼到最后一天了...

谢谢

【问题讨论】:

    标签: wpf


    【解决方案1】:

    问题来自DockPanel的使用。默认情况下,它会为其子节点提供所需的所有空间(无论可用空间如何)。

    为了修复它,我建议您使用Grid 面板而不是DockPanel

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
    
        <StackPanel Grid.Row="0">
            <Label Name="lblFolder" Content="{Binding Path=FolderName}" MinWidth="250"/>
            <Button Name="btnFolder" Content="Select Folder" Click="btnFolder_Click" />
        </StackPanel>
    
    
        <ListView Grid.Row="1" Name="lstFiles" ItemsSource="{Binding}" Margin="1" >
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Filename" DisplayMemberBinding="{Binding Path=FileName}" />
                    <GridViewColumn Header="Extenstion" DisplayMemberBinding="{Binding Path=Extension}" />
                    <GridViewColumn Header="Size" DisplayMemberBinding="{Binding Path=FileSize}" />
                    <GridViewColumn Header="Creation Date" DisplayMemberBinding="{Binding Path=CreateDate}" />
                    <GridViewColumn Header="Modified Date" DisplayMemberBinding="{Binding Path=ModifiedDate}" />
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
    

    【讨论】:

    • 对不起,这对我仍然不起作用,项目仍然从页面底部掉下来,并且滚动条不可见。甚至在 ListView 上专门设置 ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto"。
    • @Lee - 然后,问题在于包含此 UserControl 的标记。可以将其添加到您的问题中,以便我看一下吗?
    • 这里是主机窗口&lt;Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"&gt; &lt;Grid&gt; &lt;ItemsControl x:Name="itemcontrol" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" /&gt; &lt;/Grid&gt; &lt;/Window&gt;
    • 以及后面添加控件的代码 ` public MainWindow() { InitializeComponent(); Presenters.FolderViewPresenter folderpresenter = new Presenters.FolderViewPresenter(); itemcontrol.Items.Add(folderpresenter.m_View); }`
    • @Lee - 只需使用 ContentPresenter 并将其 Content 属性设置为 UserControl 的实例: contentPresenter.Content = folderpresenter.m_View;那么你就不需要把它包装在一个 ScrollViewer 中了。
    猜你喜欢
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 2018-06-06
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    相关资源
    最近更新 更多