【发布时间】:2009-10-09 21:24:01
【问题描述】:
这是this 的后续问题,已得到答复。
使用代码:
<ListBox ScrollViewer.VerticalScrollBarVisibility="Disabled">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
您可以创建一个列表,其中项目从左到右填充列中的ListBox,并且特定列中的最后一个项目永远不会被截断(这意味着如果项目太高不适合,它会被移动到顶部下一栏)。我现在如何动态调整 ListBox 的 Width 以“适合”它的项目并水平获得相同的行为。所以假设如下:
如果在给定的Height 处,只需要一个Column 即可容纳所有项目,那么ListBox 中的Width 应该是项目中Width 的大小。
或者,对于给定的Height,需要有四个Columns,它的大小需要是项目的Width 的四倍。
最后,假设在给定的Height 处,Columns 需要比 ListBox 中允许的最大Width 多,它需要计算它应该有多宽,以便无法适应的Columns 不会被截断,只是在用户向右滚动之前不会显示。
感谢您的帮助!!
编辑:
我认为表达上述内容的一种更简单的方法是,我正在寻找一种方法来避免“剪切”列表中的项目。我想创建一个在网格中显示项目的列表,但您不必滚动,因为某些项目被部分覆盖,并且需要您向右或向左滚动才能看到该项目的其余部分(尽管列表只能这么宽或这么高,如果有足够的项目你仍然需要滚动才能看到所有项目,你看到的任何项目都应该完全显示)。另外我只关心列表的初始绘制。它不必“对齐”项目以始终适合,但它应该能够滚动,以便它显示的项目完全填充可用空间。
在我看来,这样做的关键是在运行时计算出列表项的大小以及列表框中内容容器的大小,然后您可以在列表是最初绘制的?
谢谢!
【问题讨论】:
-
您能否在网络上某个地方发布您想要的行为示例...目前尚不清楚您的要求是什么。
-
假设我有一个类似本示例中的列表:windowsclient.net/learn/video.aspx?v=29384,我该如何更改该示例,以便在它第一次显示列表时只能看到完全可见的项目?完全可见是指其中一个框的一部分不应被容器的末端覆盖,以至于您必须滚动才能看到所有该项目。希望有帮助!
标签: c# wpf listbox autosize itemspaneltemplate