我有一个布局,其中我有四个复选框,如果它们适合我想以横向排列显示,如果它们不将它们包装到另一条线。
我在ListView中使用WrapGrid,如下所示:
<ListView Width="Auto">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapGrid Orientation="Horizontal" MaximumRowsOrColumns="4"/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<CheckBox IsChecked="True" Content="Short text"/>
<CheckBox IsChecked="True" Content="Longer text (with explanation)" />
<CheckBox Content="Some other longer stuff" />
<CheckBox Content="ABCDEDFGHIJKLMNOPQRSTUVWXYZ"/>
</ListView>
它几乎表现得如此,但出于某种原因,它会从我的复选框中剪切文本,将所有这些文本设置为与第一个文档具有相同的宽度(在我的示例中为Short text
)。我可以通过首先使用最长文本的复选框来解决这个问题,但我真的希望让ListView自己找出最宽项目的宽度。这可能吗?
答案 0 :(得分:0)
使用 WrapPanel
并在 ListView 上设置 ScrollViewer.HorizontalScrollBarVisibility="Disabled"
,以便自动换行在case元素中不适合在给定的空间内。
<ListView Width="Auto" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<CheckBox IsChecked="True" Content="Short text"/>
<CheckBox IsChecked="True" Content="Longer text (with explanation)" />
<CheckBox Content="Some other longer stuff" />
<CheckBox Content="ABCDEDFGHIJKLMNOPQRSTUVWXYZ"/>
</ListView>
击> <击> 撞击>
我会在这里保留上述内容,以便如果有人偶然发现WPF的这篇文章,上述解决方案将适用于该情况。
更新:
WrapGrid
是不可能的,因为它总是选择第一个项目大小。您可以阅读更多相关信息here。