2

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

使用代码:

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

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

如果在给定的情况下Height,只需要一个Column来适应所有项目Width,那么ListBox应该是项目的大小Width

或者,在给定的Height情况下,需要四个Columns,它的大小需要是Width项目的四倍。

最后,假设在给定的Height情况下,s 需要Column超过 s 的最大允许Width ListBox,它需要计算它应该有多宽,以便Columns 中无法容纳的项目不会被截断,但只是不显示直到用户向右滚动。

谢谢你的帮助!!

编辑:

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

在我看来,这样做的关键是在运行时确定列表项的大小以及列表框中内容容器的大小,然后您可以在列表最初出现之前对其进行调整以一次完全适应这么多项目画?

谢谢!

4

1 回答 1

1

这是一个相当复杂的问题。我不是 100% 确定您要在这里完成什么......随着高度的增加,您看到的列数是否需要增加或减少?我希望减少,但你提出问题的方式似乎你想要相反,我试图理解这一点。

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

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

这是关于 WPF 中布局系统的几个很好的链接。希望这会有所帮助。回来澄清您的问题,看看如果您需要,我们能否为您提供更多帮助。

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

于 2009-10-11T02:58:26.460 回答