0

ItemsControl に基づいて WPF で動的テーブルを作成しようとしています。理想的には、コレクションの各要素を特定のスタイルでレンダリングし、ラップして次の行に移動する前にテーブル全体に 3 つ収まるようにする必要があります。それはほぼ完璧に動作しますが、唯一の問題は、リストのエントリ 3 の後に幅約 30 ピクセルの空きスペースがあることです。数値を合計すると、テキストブロック + マージンがそれぞれ 140 に等しいことがわかります。つまり、そのうちの 3 つが 420 で、表の幅が 450 であるため、考えられる問題があります。

残念ながらそうではありません。

最初のテキスト ブロックの幅を 105 ではなく 110 に増やした場合、わずかな変更で、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>
4

1 に答える 1