交互式动态wpf网格

时间:2013-04-21 12:20:52

标签: c# wpf xaml wpf-controls

我有一个我想要放在网格上的集合。集合项具有属性,这些属性引用项目应放置在网格上的位置,以及项目应跨越多少列和行。所以该项看起来像这样:

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>

如您所见,我正在使用动态网格部件的附加属性。但我无法弄清楚有两个问题。

第一个问题:我想在填充网格的项目上启用拖放功能,以便我可以操作网格上的项目位置。现在我需要鼠标位置下降应该达到的位置。我四处搜寻,发现了这个:

private void OnMouseMove(object sender, MouseEventArgs e)
{
    var element = (UIElement)e.Source;

    int c = Grid.GetColumn(element);
    int r = Grid.GetRow(element);
}

这意味着网格必须在每个单元格中都有UIElements,但ItemsControl不允许我向网格添加任何可理解的内容。

第二个问题:我希望行和列具有迭代头。我所看到的是第一列在其第一个单元格中具有“1”,第二列在其第一个单元格中具有“2”,依此类推。行也一样。

我希望我已经解释了我的问题,所以你们都明白了。任何输入都将非常感激。如果你知道一个更好的方式来做我所解释的,除了在ItemsControl中的普通网格之外的其他工具,请分享! :d

提前致谢!

0 个答案:

没有答案