次のサンプルからわかるように、探している動作はのデフォルトの動作です。WrapPanel
<WrapPanel >
<WrapPanel.Resources>
<Style TargetType="{x:Type Rectangle}">
<Setter Property="Width"
Value="80" />
<Setter Property="Height"
Value="80" />
<Setter Property="Margin"
Value="3" />
<Setter Property="Fill"
Value="#4DB4DD" />
</Style>
</WrapPanel.Resources>
<Rectangle Width="150" />
<Rectangle />
<Rectangle />
<Rectangle />
<Rectangle Width="200"/>
<Rectangle />
<Rectangle />
<Rectangle />
<Rectangle Width="220"/>
<Rectangle />
<Rectangle />
</WrapPanel>
これにより、次の結果が生成されます。

ご覧のとおり、各アイテムの幅は尊重されています。
問題は、テンプレートでの方向WrapPanel
を設定することによって発生します。Vertical
これは、アイテムを左から右ではなく上から下にHeight
レイアウトすることです。つまり、設定する必要があるのはプロパティです(または、私の例のように水平レイアウトに戻すことができます)。
出力を、パネルが水平方向に設定されているスクリーンショットと比較します。各行は、最も高いサイズですRectangle
。私を信じないの?プロパティの1つをより大きな値に設定してみてくださいRectangle's
Height
。行のサイズが大きくなり、Rectangles
垂直方向に整列しなくなることがわかります。
コメントを読む始めるための最良の方法は、次のことを行うことだと思います。
WrapPanel
コンテンツを水平方向にレイアウトするを用意します。
- アイテムは均一でなければなりません
Height
。
Height
のを特定のサイズに制限して、WrapPanel
垂直スクロールバーが表示されないようにします。
あなたの身長はWrapPanel
、次の式を使用して計算する必要があります。
((アイテムの高さ+上マージン+下マージン)x行数))
パネルがメトロインターフェースのようにアイテムを水平に配置するように(千鳥ではなく並べて)、各アイテムの幅にも少し注意が必要です。
2つのタイルサイズがあります。小さい方は幅80px、大きい方は幅166pxです。大きなタイルの幅は次のように計算されます。
(アイテム幅* 2)+(左マージン+右マージン)
これにより、タイルが正しく整列します。
したがって、私のXAMLは次のようになります。
<ScrollViewer HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Disabled">
<StackPanel Orientation="Horizontal"
Margin="10,0">
<StackPanel.Resources>
<Style TargetType="{x:Type Rectangle}">
<Setter Property="Width"
Value="80" />
<Setter Property="Height"
Value="80" />
<Setter Property="Margin"
Value="3" />
<Setter Property="Fill"
Value="#4DB4DD" />
</Style>
<Style TargetType="{x:Type WrapPanel}">
<Setter Property="Margin"
Value="0,0,25,0" />
<Setter Property="MaxWidth"
Value="516" />
</Style>
</StackPanel.Resources>
<WrapPanel Height="258">
<Rectangle Width="166" />
<Rectangle />
<Rectangle Width="166" />
<Rectangle />
<Rectangle Width="166" />
<Rectangle />
<Rectangle />
<Rectangle />
<Rectangle />
<Rectangle Width="166" />
<Rectangle />
</WrapPanel>
<WrapPanel Height="258">
<Rectangle />
<Rectangle Width="166" />
<Rectangle />
<Rectangle />
<Rectangle />
<Rectangle />
<Rectangle />
<Rectangle Width="166" />
<Rectangle />
</WrapPanel>
</StackPanel>
</ScrollViewer>
これにより、次の結果が生成されます。

これにより、これを完全な制御にリファクタリングし始めるのに十分な情報が得られるはずです。これを行う場合は、次の点に注意してください。
- レイアウトプロパティ(小さいアイテムサイズ、大きいアイテムサイズ、ギャップなど)は、ハードコーディングするのではなく計算する必要があります。これにより、マージンなどを変更する場合でも、レイアウトは正しく機能します(つまり、タイルは引き続き整列します)。 )。
- 表示できる「タイル」の数を制限します(現在の例では、タイルがレイアウトに収まらない場合は、単に非表示になっているため、おそらく必要なものではありません)。