1
3つのアイテムを連続して取得するGridViewを実装したい場合、最後の行のアイテム数が2である場合、最後の行アイテムは、整列した。ここで私が達成したいことを説明するための画像がいくつかあります。最後の行のGridViewアイテムの中央揃え
現在、私の実装では、
のように見えます。
これが私が達成したいことです。
任意の助けいただければ幸いです。
3つのアイテムを連続して取得するGridViewを実装したい場合、最後の行のアイテム数が2である場合、最後の行アイテムは、整列した。ここで私が達成したいことを説明するための画像がいくつかあります。最後の行のGridViewアイテムの中央揃え
現在、私の実装では、
のように見えます。
これが私が達成したいことです。
任意の助けいただければ幸いです。
あなたが言及した機能を実現する方法はたくさんあります。
要約すると、GridView
を継承し、MeasureOverride
ArrangeOverride
メソッドをオーバーライドして、Panelの子の各Rect
を再計算する必要があります。この方法は複雑です。詳細は XAML custom panels overviewを参照してください。
また、PrepareContainerForItemOverride
メソッドを使用してアイテムを直接レイアウトすることもできます。
<local:VariableGrid
x:Name="MyGridView"
SelectionMode="Single"
IsSwipeEnabled="False">
<local:VariableGrid.ItemTemplate >
<DataTemplate>
<StackPanel BorderBrush="Red" BorderThickness="3" Height="200" Width="200" Margin="20">
</StackPanel>
</DataTemplate>
</local:VariableGrid.ItemTemplate>
<local:VariableGrid.ItemsPanel>
<ItemsPanelTemplate>
<VariableSizedWrapGrid
Orientation="Horizontal"
VerticalAlignment="Top"
ScrollViewer.HorizontalScrollMode="Enabled"
ScrollViewer.VerticalScrollMode="Disabled"
MaximumRowsOrColumns="4">
</VariableSizedWrapGrid>
</ItemsPanelTemplate>
</local:VariableGrid.ItemsPanel>
</local:VariableGrid>
VariableGrid.cs
public sealed class VariableGrid : GridView
{
public VariableGrid()
{
this.DefaultStyleKey = typeof(VariableGrid);
}
protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
{
var list = this.ItemsSource as List<string>;
var griditem = element as GridViewItem;
for (var t = ((list.Count - list.Count % 4)); t < list.Count; t++)
{
if (item as string == list[t])
{
if (griditem != null)
{
VariableSizedWrapGrid.SetColumnSpan(griditem, 2);
}
}
}
base.PrepareContainerForItemOverride(element, item);
}
}
しかし、この単純な方法は、すべてのシナリオにフィットすることはできません。
ありがとうございました。この実行例で使用したコードを教えてください。 – aadilp
はい、[this](https://github.com/ZhuMingHao/GridViewFlowTest.git)はコードサンプルです。 –