2012-07-04 17 views
11

Windows 8のリストビュー内でListItemを水平にフローさせるにはどうすればいいですか?デフォルトの動作は垂直ですが、水平方向のフローでリストを表示して、パノラマとしてレンダリングできるようにしたいのです。Windows 8水平アイテムフローのリストビュー

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

+0

これはWPFについての回答ですが、これは私のWinRTアプリで私の仕事でした:http://stackoverflow.com/questions/359217/how-do-i-make-wpf-listview-items-repeat-horizo​​ntally- like-a-horizo​​ntal-scrollba – KallDrexx

答えて

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> 

- それを水平パネルと水平スクロールのための右のスクロールバーを提供しています。

大きなアイテムを取得すると、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> 

- すべてのアイテムが同じサイズである必要があります。

- それはあなたの大規模なデータセットのためのより良い性能と低メモリ使用量を取得する必要がありますので、私は、仮想化されてItemsStackPanelStackPanelを置き換えるために、この答えを変更しましたが、PLEASE - - も注意して作成することはありません大きな横スクロール可能なリストを持つレイアウト。いくつかの非常に限定されたシナリオでは良い解決策になるかもしれませんが、多くの場合、多くの良いUIパターンが崩れ、アプリを使いにくくします。

+1

このアプローチは、GridViewの編集コントロール上に表示されるタッチキーボードの問題を修正するようにも見える!私は十分にこの答えをupvoteできません! –

+0

'StackPanel'を' ItemsPanel'として使用すると、仮想化が無効になるので、コントロールされていないサイズのリストでは使用しないでください。私はそのような場合に代わりに 'ItemsStackPanel'を使用しようとします。私はそれをテストしていないので、私は答えを更新していないよ。確かにそれはうまくいくはずです。 –

+0

には、「VirtualizingStackPanel」と呼ばれるものがあります。 – Quincy

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 Style="{StaticResource VerticalListView}" /> 
0

私はスタイルのアプローチを好むだろうが、あなたがする必要がありますパネルの向きを慎重に変更してください。最初のビジュアルレイアウトが合格する前に、アイテムコントロールパネルは作成されないため、変更することはできません。初期オリエンテーションの設定がXamlの1行と異なる場合は、これを処理する戦略を見つけなければなりません。おそらく、スタイル設定ツールを介してItemsPanelTemplateを割り当てます。

関連する問題