Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有水平项目流的Windows 8 ListView_Listview_Windows Runtime_Winrt Xaml - Fatal编程技术网

具有水平项目流的Windows 8 ListView

具有水平项目流的Windows 8 ListView,listview,windows-runtime,winrt-xaml,Listview,Windows Runtime,Winrt Xaml,如何使windows 8 ListView中的ListItems水平流动。默认行为是垂直的,但我想在水平流中显示列表,以便它可以渲染为全景 我尝试了GridView,它支持水平布局,但对项目高度有一个限制,不能显示大文本项目的完整项目内容。您可以通过以下方式使用列表视图: <ListView Height="500" VerticalAlignment="Center" ScrollViewer.HorizontalScrollBarVisibility="Auto

如何使windows 8 ListView中的ListItems水平流动。默认行为是垂直的,但我想在水平流中显示列表,以便它可以渲染为全景


我尝试了GridView,它支持水平布局,但对项目高度有一个限制,不能显示大文本项目的完整项目内容。

您可以通过以下方式使用列表视图:

<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>

--这给了它一个水平面板和用于水平滚动的右滚动条

当您获取较大的项目时,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
,因此它可以为大型数据集提供更好的性能和更低的内存使用率,但请不要创建具有大型水平滚动列表的布局。在某些非常有限的场景中,它们可能是一个很好的解决方案,但在大多数情况下,它们会破坏许多良好的UI模式,使您的应用程序更难使用。

您还可以使用以下样式封装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}" />


我更喜欢样式方法,但您需要小心修改面板方向。在第一次视觉布局通过之前,将不会创建项目控制面板,因此无法进行修改。如果初始方向与Xaml的一行不同,则必须找到一种策略来处理初始方向的设置。也可以通过样式设置器分配ItemsPanelTemplate。

尽管这是关于WPF的答案,但在我的WinRT应用程序中,这对我来说很有效:这种方法似乎也解决了GridView中编辑控件上出现触摸键盘的问题!我对这个答案的评价是不够的!请注意,将
StackPanel
用作
ItemsPanel
会禁用虚拟化,因此不应将其用于大小不受控制的列表。在这种情况下,我会尝试使用
ItemsStackPanel
。我没有更新答案,因为我还没有测试过。在8.1中有一个叫做“VirtualzingStackPanel”的东西,VirtualzingStackPanel是8.0、Silverlight和WPF中的旧面板。我相信
ItemsStackPanel
是一款新的、经过改进的面板,具有更好的性能和附加功能。我在Windows Phone 8.1上尝试了此解决方案,并建议添加
operationmode=“TranslateRailsX”
。如果您的listview位于FlipView或类似的内容中,则可以进行水平滚动。另外,当我从ListView中删除项目时,我在动画中遇到了一些小问题,但在添加这个之后就没有了。工作如期顺利。