如何使Windows 8 ListView中的ListItem水平流动。默认行为是垂直的,但我想在水平流中显示列表,以便它可以呈现为全景。
我尝试过支持水平布局的GridView,但项目高度有限制,没有显示大文本项目的完整项目内容。
答案 0 :(得分:47)
您可以这样使用ListView:
<ListView
Height="500"
VerticalAlignment="Center"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Disabled"
ScrollViewer.HorizontalScrollMode="Enabled"
ScrollViewer.VerticalScrollMode="Disabled"
ScrollViewer.ZoomMode="Disabled"
SelectionMode="None">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsStackPanel
Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
- 它为水平面板和右侧ScrollBars提供水平滚动。
当您获得更大的项目时,ListView和GridView都会导致问题。我认为默认情况下,可能会根据添加的第一个项目的大小来调整项目的大小。您可以手动设置该大小:
<ListView.ItemContainerStyle>
<Style
TargetType="ListViewItem"><!-- note - for GridView you should specify GridViewItem, for ListBox - ListBoxItem, etc. -->
<Setter
Property="Height"
Value="200" /> <!-- this is where you can specify the size of your ListView items -->
<Setter
Property="Width"
Value="350" />
</Style>
</ListView.ItemContainerStyle>
- 请注意,所有项目的大小必须相同。
- 另请注意 - 我已将此答案更改为将StackPanel
替换为虚拟化的ItemsStackPanel
,因此它可以为大型数据集提供更好的性能和更低的内存使用率,但< strong>请 - 不要使用大型水平滚动列表创建布局。在一些非常有限的场景中,它们可能是一个很好的解决方案,但在大多数情况下,它们会破坏许多优秀的UI模式并使您的应用程序更难使用。
答案 1 :(得分:5)
您还可以使用样式封装Filips方法:
<Style TargetType="ListView" x:Key="VerticalListView">
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled" />
<Setter Property="ScrollViewer.HorizontalScrollMode" Value="Enabled" />
<Setter Property="ScrollViewer.VerticalScrollMode" Value="Disabled" />
<Setter Property="ScrollViewer.ZoomMode" Value="Disabled" />
<Setter Property="SelectionMode" Value="None" />
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<StackPanel VerticalAlignment="Top" Orientation="Horizontal" />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="ListViewItem">
<Setter Property="Height" Value="400" />
</Style>
</Setter.Value>
</Setter>
</Style>
根据需要将其应用于ListView:
<ListView Style="{StaticResource VerticalListView}" />
答案 2 :(得分:0)
我更喜欢样式方法,但您需要小心修改面板方向。在第一个视觉布局通过之前,项目控制面板不会被创建,因此无法修改。如果它与Xaml的一行不同,您必须找到处理初始方向设置的策略。也许也可以通过样式设置器分配ItemsPanelTemplate。