我有一个带有多个ListView控件的应用程序,其中要求ListView中的项目必须完全可见。应该永远不会在列表中显示部分ListViewItem。如果用户在最终显示部分项目的位置释放ScrollViewer,则列表应“快照”并自行更正,以便仅显示完整项目。
以前有人这样做过吗?我想我需要重载ListView和/或ScrollViewer才能执行此操作。我正在寻找有关如何处理此问题的建议。感谢。
以下是我的一个清单:
<ctrls:SnapList x:Name="PART_ProductList"
ScrollViewer.CanContentScroll="False"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Hidden"
ItemContainerStyle="{StaticResource ProductFinderItem}"
Canvas.Top="373" Canvas.Left="75"
Height="910" Width="900" >
<ctrls:SnapList.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Standard" />
</ItemsPanelTemplate>
</ctrls:SnapList.ItemsPanel>
<ctrls:SnapList.Template>
<ControlTemplate>
<ScrollViewer x:Name="Scroller" VerticalAlignment="Top" CanContentScroll="True" Style="{StaticResource VertScrollViewer}" Focusable="false" >
<ItemsPresenter />
</ScrollViewer>
</ControlTemplate>
</ctrls:SnapList.Template>
</ctrls:SnapList>
答案 0 :(得分:1)
我相信你正在寻找ScrollViewer.CanContentScroll财产
如果您知道ListView中项目的最大大小,请确保ListView的高度大小相同,或者是项目高度的倍数。
工作示例:
<ListView ScrollViewer.CanContentScroll="True"
Height="200">
<ListBoxItem Height="50"
Content="Test1" />
<ListBoxItem Height="50"
Content="Test2" />
<ListBoxItem Height="50"
Content="Test3" />
<ListBoxItem Height="50"
Content="Test4" />
<ListBoxItem Height="50"
Content="Test5" />
<ListBoxItem Height="50"
Content="Test6" />
<ListBoxItem Height="50"
Content="Test7" />
<ListBoxItem Height="50"
Content="Test8" />
<ListBoxItem Height="50"
Content="Test9" />
<ListBoxItem Height="50"
Content="Test10" />
</ListView>
ScrollViewer中的内容可以按物理单位滚动 或逻辑单位。物理单位是与设备无关的像素。 逻辑单元用于滚动ItemsControl中的项目。该 ScrollViewer的默认行为是使用物理单位 滚动其内容。但是,在CanContentScroll的情况下 设置为true,内容可以使用逻辑单元滚动。对于 例如,ListBox,ListView和其他继承的控件 ItemsControl使用逻辑单元滚动。如果CanContentScroll为true, ExtentHeight,ScrollableHeight,ViewportHeight和的值 VerticalOffset属性是项目数,而不是物理数 单元。
如果您需要物理滚动而不是逻辑滚动,请换行 ScrollViewer中的主机Panel元素并设置其CanContentScroll 财产到假。物理滚动是默认的滚动行为 对于大多数Panel元素。
答案 1 :(得分:0)
您是否尝试过ListView.ScrollIntoView
?
答案 2 :(得分:0)
您可以尝试跟踪scrollview的当前滚动,然后获取所有项目的高度。然后你就会知道如何计算每个项目的正确偏移量。当他们释放滚动动画到最近的偏移。