11

Windows8ListView内のListItemを水平方向に流れるようにするにはどうすればよいですか。デフォルトの動作は垂直ですが、パノラマとしてレンダリングできるように、リストを水平フローで表示したいと思います。

水平レイアウトをサポートするGridViewを試しましたが、大きなテキストを含むアイテムの完全なアイテムコンテンツを表示しないアイテムの高さに制限があります。

4

3 に答える 3

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ので、パフォーマンスが向上し、大きなデータ セットのメモリ使用量が少なくなりますが、横方向にスクロール可能な大きなリストを含むレイアウトを作成しないでください。非常に限られたシナリオでは良い解決策かもしれませんが、ほとんどの場合、多くの優れた UI パターンを壊し、アプリを使いにくくします。

于 2012-07-05T13:49:17.320 に答える
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>

必要に応じて ListViews に適用します。

<ListView Style="{StaticResource VerticalListView}" />
于 2014-03-17T13:28:42.277 に答える
0

私はスタイル アプローチを好みますが、パネルの向きを慎重に変更する必要があります。最初のビジュアル レイアウト パスの前に、アイテム コントロール パネルは作成されないため、変更することはできません。Xaml の 1 行とは異なる場合は、初期方向の設定を処理する戦略を見つける必要があります。スタイルセッターを介してItemsPanelTemplateを割り当てることもできます。

于 2014-11-14T21:05:42.337 に答える