表示されているスクリーンショットから、すべてのアイテムが同じサイズであるため、VariableSizedWrapGrid
. コントロールを使用するだけで、GriView
説明したようにアイテムが自動的にラップされます。
- 小さな画面では、すべての項目が縦に積み上げられています
- 幅の広い画面では、アイテムは水平方向に流れ、使用可能な幅と単一のアイテムの幅に従って次の行に折り返されます。
1 2 3
4 5 6
7
<GridView ItemsSource="{Binding YourItems}"
ItemTemplate="{StaticResource YourItemTemplate}">
単一のアイテムのレイアウトは YourItemTemplate で指定され、DataTemplate
すべて設定されています。
更新:質問が可変サイズの項目に変更されたため、より複雑になりました。
- ListView は、アイテムのさまざまな高さの自動スケーリングを提供します。ただし、1 つの列に限定されます。
- VariableSizedWrapGrid には、使用される # 行/列の「割り当て」が必要です。最大限の柔軟性を得るために、セルの高さを 1 ピクセルにし (パフォーマンス ヒットに注意してください!!)、必要な高さを割り当てることができます。したがって、いくつかの計算を追加する必要があり、テキストがレンダリングされるのに何行かかるかは 100% わかりません (ただし、文字数に基づいて適切に推測することはできます)。
以前、完全に柔軟なレイアウトのために 2 番目のアプローチを使用したことがありますが、必ずしも 100% 完璧ではありませんでした (ほとんどのフォントでは、M は I よりも多くのスペースを必要とするため)。サイズを計算するときにそれも考慮したくない場合を除きます。
テキスト ボックスを表示画面の外にレンダリングする (座標 -500/-500 など) など、他にもたくさんのハックがあります。レンダリングされたサイズを確認し、それを VariableSizedWrapGrid に使用します。
私の結論は次のとおりです。
- 簡単な計算 (例: > 80 文字 = 2 行) を使用して、小さいタイルが必要か大きいタイルが必要かを判断します。
- デバイス名にはデフォルトで 2 行を指定します。短い場合は 1 行のみを使用し、残りのコンテンツは下揃えになります。
- デバイス名に 1 行を入力し、テキストが長い場合はトリミングします。詳細ページでは氏名を使用できます。
2 または 3 のいずれかを選択します。これは、実装が簡単であり、同じサイズのタイルの方が可変サイズのタイルよりも概観 (整列されたテキスト) が優れているためです。