我正在尝试基于ItemsControl在WPF中创建动态表。理想情况下,我希望使用特定样式呈现集合的每个元素,并在它包装之前在表中适应3并转到下一行。它几乎完美地工作,唯一的问题是在列表中的条目3之后我有大约30像素的空白空间宽度。如果你加上数字,你会发现textblocks + margin等于140,所以其中3个是420 - 表格宽度是450,所以你会想到这个问题。
可悲的是没有。
如果我将第一个文本块增加到宽度为110而不是105,只需要一个小的更改,这将给出3个条目435的总宽度,仍然小于450 - 这是表格的宽度,然后它仅在2个条目后包装并在右侧留下一个大的空白区域。
我怀疑它可能是由于WPF为垂直滚动条保留的“保留空间”,因为它通常为20宽,这将使我的可用空间为430,并且435高于该值,因此它包装
我的问题是,如何隐藏所有滚动条并使它们不显示或保留任何预留空间,以便我可以使用项目控件的全宽度?
下面的XAML
<ItemsControl ItemsSource="{Binding TradeCategories}" Grid.Row="1">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" MaxWidth="450" Background="{StaticResource SubTableRow}"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" MaxWidth="150">
<TextBlock Width="105" FontSize="10" Text="{Binding CategoryName}" Foreground="{StaticResource SubTableText}" Margin="5,0,0,0"/>
<TextBlock Width="25" FontSize="10" Text="{Binding CategoryCount}" TextAlignment="Center" Background="{StaticResource SubTableHighlightCell}" Foreground="{StaticResource SubTableText}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
答案 0 :(得分:0)
ItemControl
的宽度看起来比您预期的要小,可能会被它的容器限制。
一个简单的解决方法是替换
<WrapPanel Orientation="Horizontal" MaxWidth="450" ...
通过
<WrapPanel Orientation="Horizontal" MinWidth="450" ...
以确保WrapPanel
有足够的空间容纳3件物品。
这样,即使ItemControl
小于450,您每行仍有3个项目。
另一种解决方案是强制Width
的{{1}}为450。