WrapPanel未填满所需宽度

时间:2013-10-11 15:01:06

标签: c# wpf itemscontrol

我正在尝试基于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>

1 个答案:

答案 0 :(得分:0)

ItemControl的宽度看起来比您预期的要小,可能会被它的容器限制。

一个简单的解决方法是替换

<WrapPanel Orientation="Horizontal" MaxWidth="450" ...

通过

<WrapPanel Orientation="Horizontal" MinWidth="450" ...

以确保WrapPanel有足够的空间容纳3件物品。 这样,即使ItemControl小于450,您每行仍有3个项目。

另一种解决方案是强制Width的{​​{1}}为450。