【发布时间】:2012-10-24 22:12:20
【问题描述】:
我确实有一个关于在滚动查看器内使用列表视图进行布局的问题。一旦列表视图位于滚动查看器内,它就会使用它的最大尺寸并且不会自行滚动,因为滚动查看器为其中的控件提供了无限量的空间。 问题是,只有在用户向下滚动时才能看到长列表下方的控件,并且我想让列表视图仅使用必要的空间并使用滚动条本身。图片确实比文字提供了更多信息(图片链接也确实说明了很多,因为我的声誉还没有达到 10.. Edit2:我只能使用一个链接,所以我将所有图片复制到一个上)。 如果列表不长,一切正常:
图一:
现在,如果列表更长,下面的控件将向下移动到不可见的土地:
图2:见图1中的链接
我现在想要发生的事情是这样的:
图3:参见图1中的链接
这本身并不是一个真正的问题,因为我们可以将所有内容放在一个dockpanal中,并将下面的控件停靠到Dock.Below和Top to Top,并让列表视图用“lastchildfill”填充中心。现在解决真正的问题。如果窗口变小了怎么办?然后首先列表视图消失,然后其他所有内容都消失了,而没有滚动条滚动到底部的控件。
图4:参见图1中的链接
我正在寻找的理想解决方案是在窗口(或根滚动查看器)上有滚动条,这将使我们能够像这样滚动到窗口的每个部分并且只有外部滚动条一旦一切都达到最小尺寸,就可以看到。
图5:参见图1中的链接
有什么想法吗?图片太多?这里有一些 xaml 供大家尝试使其工作(这只是一个快速示例窗口...)
<Window x:Class="WpfTest1.ScrollTestWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="ScrollTestWindow" Height="400" Width="700">
<ScrollViewer >
<DockPanel LastChildFill="True" ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Visible">
<Grid DockPanel.Dock="Top">
<TextBlock Text="Example controls above listview" Background="LightGray" FontSize="30"></TextBlock>
</Grid>
<Grid DockPanel.Dock="Bottom">
<TextBlock Text="Example controls below listview" Background="LightGray" FontSize="30"></TextBlock>
</Grid>
<ListView FontSize="30">
<ListView.View>
<GridView>
<GridViewColumn Width="190" Header="Date" />
<GridViewColumn Width="200" Header="Day Of Week" DisplayMemberBinding="{Binding DayOfWeek}" />
<GridViewColumn Width="120" Header="Year" DisplayMemberBinding="{Binding Year}" />
</GridView>
</ListView.View>
<sys:DateTime>1/1/1</sys:DateTime>
<sys:DateTime>1/1/1</sys:DateTime>
<sys:DateTime>1/1/1</sys:DateTime>
<sys:DateTime>1/1/1</sys:DateTime>
<sys:DateTime>1/1/1</sys:DateTime>
<sys:DateTime>1/1/1</sys:DateTime>
<sys:DateTime>1/1/1</sys:DateTime>
<sys:DateTime>1/1/1</sys:DateTime>
</ListView>
</DockPanel>
</ScrollViewer>
【问题讨论】:
标签: c# wpf listview layout scrollviewer