WPF GridView:“报纸”专栏?

时间:2010-03-02 15:35:49

标签: wpf wpf-controls

我不确定如何形容这一点,除了称之为“报纸”专栏。

基本上我有一个可能很长的代码列表,我想在网格中显示,而且我的垂直空间有限。我想在多列中显示这些代码(它们都来自同一个数据库列),可能是3-5列。

如果这是最好的解决方案,我绝对可以将数据分解为单独的源并单独绑定它们,但我认为使用WPF可能有一种简单的内置方法来实现这一点。

2 个答案:

答案 0 :(得分:5)

使用WrapPanel

实际上是微不足道的

对于硬编码列表:

<WrapPanel Orientation="Vertical">
  <ItemOne />
  <ItemTwo />
  ...
</WrapPanel>

对于数据绑定列表:

<ItemsControl ItemsSource="...">
  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <WrapPanel Orientation="Vertical" />
    </ItemsPanelTemplate>
  </ItemsControl.ItemsPanel>
  <ItemsControl.ItemTemplate>
    <DataTemplate DataType="...">
      ...
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>

如果需要,您可以将ItemsControl替换为ListBox或将其设为ComboBox或其他任何内容。您可以为数据使用默认模板,也可以使用自定义模板,如上所示。如果您想要多列列表,甚至可以使用ListViewGridView

答案 1 :(得分:0)

我怀疑你在这里看到的是一个自定义布局面板,它具有明确定义的高度,然后包装到下一列。然后,您可以使用列表控件的ItemsPanelTemplate来使用新的自定义面板。

关于面板本身的开发,我怀疑从网格中包装或继承将是一个很好的首选。然后,该面板可以根据列中包含的项目数来管理列定义。

为了确定单个项目的布局,我怀疑使用ActualHeight来确定何时另一个项目会导致列溢出并使用它移动到下一列将是最佳解决方案。我可以想象使用一个垂直的堆栈面板,每列中没有边框或填充可能会使您更容易将布局卸载到这些控件,但我相信您仍然需要确定将项目放在哪个面板中基于项目高度。