具有自定义ItemsPanel模板的WPF ListBox如何根据其项目的大小自行调整大小

时间:2009-10-09 21:24:02

标签: c# wpf listbox autosize itemspaneltemplate

这是this的后续问题,已得到回答。

使用代码:

<ListBox ScrollViewer.VerticalScrollBarVisibility="Disabled">
  <ListBox.ItemsPanel>
    <ItemsPanelTemplate>
      <WrapPanel Orientation="Vertical"/>
    </ItemsPanelTemplate>
  </ListBox.ItemsPanel>
</ListBox>

您可以创建一个列表,其中的项目从左到右填充ListBox列,并且特定列中的最后一项永远不会被截断(意味着如果项目是高到适合,则移动到下一栏的顶部)。我现在如何动态调整Width的{​​{1}}以“适合”它的项目并水平获得相同的行为。所以假设如下:

如果在给定的ListBox,只需要一个Height来容纳所有项目,Column的{​​{1}}应该是Width项目。

或者,在给定ListBox时,需要有四个Width,它的大小必须是项目Height的四倍。

最后,在给定的Column说,需要比Width的最大允许Height更多Column s,它需要计算它的宽度应该是这样Width中无法适应的项目不会被截断,只是在用户向右滚动之前不会显示。

感谢您的帮助!

修改

我认为一种更简单的方式来表达上述内容是我正在寻找一种方法来避免列表中的“剪切”项目。我想创建一个列表,显示网格中的项目,但不必滚动,因为有些项目被部分覆盖,需要您向右或向左滚动以查看该项目的其余部分(尽管列表只能是如此宽或高,如果有足够的物品,你仍然需要滚动才能看到所有物品,你看到的任何物品都应该完全显示出来。我也只关心列表的初始绘图。它不必“捕捉”项目以始终适合,但它应该能够滚动,以便它完全填充可用空间与它显示的项目。

在我看来,这样做的关键是要弄清楚运行时列表项的大小和列表框中内容容器的大小,然后你可以调整它以便在之前完全适合这么多项目。列表最初是绘制?

谢谢!

1 个答案:

答案 0 :(得分:1)

这是一个非常复杂的问题。我不是100%肯定你想要在这里完成什么... 你看到的列数随着高度的增加需要增加还是减少?我希望减少,但你说出问题的方式似乎你想要反过来,我试图理解这一点。

我认为在尝试理解这些问题时,对WPF布局系统的基本了解非常有用。另一件有用的事情是,某些东西的大小很大程度上取决于它的布局容器,而不是东西本身。

在您的问题中,您询问如何根据内容动态调整ListBox的大小。 ListBox不是布局控件,但类似于WrapPanel。即使面板内容的大小增加,WrapPanel的功能也就是说宽度相同。这与其他控件不同,例如Grid。

这里有一些关于WPF布局系统的好链接。希望这会有所帮助。回过头来澄清一下你的问题,看看如果你需要的话,我们是否能给你一些帮助。

http://www.wpftutorial.net/LayoutProperties.html http://msdn.microsoft.com/en-us/library/ms745058.aspx