我怎样才能做到这一点ListBox
,根据窗口的大小,我可以决定向它显示多少行信息?
假设有这个xaml
:
<ListBox>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid IsItemsHost="True" Rows="2"></UniformGrid>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
如果窗口的高度500px
要以行UniformGrid
显示2
,如果更多,700px
则以3
. 如何实施?
PS我听说过一些事情VisualState
,在我看来它们可以用于这种情况,但我没有找到一个正常的例子。
如果没有代码隐藏,它可能根本无法工作。
一个简单的解决方案是通过转换器计算将窗口高度转换为行数的逻辑:
有了这个你可以做一个简单的绑定:
这种解决方案的缺点是类逻辑
WindowHeightToRowsConverter
非常具体,难以重用。一个更复杂但可能可重用的解决方案,例如这个。我们把比较转换器:
现在,为了方便在代码中指定常量,这里是以下内容:
我们编写以下 XAML:
这样就可以把简单的条件组合成复杂的条件。
(
local:Double
工作谢谢DoubleExtension
。)