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>