【问题标题】:WPF GridView: "Newspaper" Column?WPF GridView:“报纸”列?
【发布时间】:2010-03-02 15:35:48
【问题描述】:

除了将其称为“报纸”专栏之外,我不知道还能如何描述它。

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

如果这是最好的解决方案,我绝对可以将数据分解为单独的源并分别绑定到它们,但我认为 WPF 可能有一种简单的内置方法来完成此任务。

【问题讨论】:

  • 那么,如果有 30 个代码,你想要 10 到 6 行(即 3 到 5 列),对吗?
  • 是的。列数不需要是动态的,以防不清楚。

标签: wpf wpf-controls


【解决方案1】:

这实际上是使用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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-01
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      相关资源
      最近更新 更多