グリッドに配置したいコレクションがあります。コレクション アイテムには、グリッド上のアイテムを配置する場所と、アイテムがまたがる列と行の数を参照するプロパティがあります。したがって、アイテムは次のようになります。
public class Item
{
public int FromRow { get; set; }
public int SpanRow { get; set; }
public int FromColumn { get; set; }
public int SpanColumn { get; set; }
}
グリッドがコレクションに対して適切な数の列と行を動的に生成し、コレクション内の各アイテムのデータ テンプレートを介してコレクションを表示するようにしたいと考えています。問題のこの部分を次のように解決したと思います。
<ItemsControl ItemTemplate="{StaticResource ItemTemplate}"
ItemsSource="{Binding ItemCollection">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid x:Name="Grid"
ShowGridLines="True"
dataHelper:DynamicGrid.RowCount="7"
dataHelper:DynamicGrid.ColumnCount="{Binding ColumnCount}"
dataHelper:DynamicGrid.ColumnWidth="{Binding ColumnWidth}">
</Grid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<Style.Setters>
<Setter Property="Grid.Row"
Value="{Binding FromRow}" />
<Setter Property="Grid.Column"
Value="{Binding FromColumn}" />
<Setter Property="Grid.RowSpan"
Value="{Binding SpanRow}" />
<Setter Property="Grid.ColumnSpan"
Value="{Binding SpanColumn}" />
</Style.Setters>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
ご覧のとおり、動的グリッド パーツに添付プロパティを使用しています。しかし、私が理解できない2つの問題があります。
最初の問題:グリッド上のアイテムの位置を操作できるように、グリッドに配置されているアイテムのドラッグ アンド ドロップを有効にしたい。ここで、ドロップが発生するはずのマウスの位置が必要です。私は周りを検索し、これを見つけました:
private void OnMouseMove(object sender, MouseEventArgs e)
{
var element = (UIElement)e.Source;
int c = Grid.GetColumn(element);
int r = Grid.GetRow(element);
}
つまり、グリッドにはすべてのセルに UIElements が必要ですが、ItemsControl では、理解できるものをグリッドに追加することはできません。
2 番目の問題: 行と列に繰り返しヘッダーが必要です。つまり、列 1 の最初のセルには '1' があり、列 2 の最初のセルには '2' があります。行についても同様です。
皆さんが理解できるように、私の問題を説明できたことを願っています。任意の入力をいただければ幸いです。そして、私が説明したことを行うためのより良い方法、ItemsControl の通常のグリッド以外のツールを知っている場合は、共有してください! :D
前もって感謝します!