ItemsPanel として UniformGrid を持つ ListBox があります。基本的に、アイテムを枠付きの長方形として表示したくありません。バインディングによって表示される行と列の数を制御できるものとして、UniformGrid を ItemsPanel として使用しました。
ListBox の ItemContainerStyle を使用して、各項目の境界線を設定しています。BorderThickness を指定すると、リスト内のすべての項目の周りに表示されます。問題は、隣接するアイテムの境界線がマージされず、隣接するアイテムに「二重境界線」が生じることです。隣接するアイテムがある場合でも、各アイテムの境界線を制御して、各アイテムが独自の太さになるようにするにはどうすればよいですか。
これが縮小されたコードです
<ListBox x:Name="lstGroups" ItemsSource="{Binding Groups}" Grid.Row="1" Style="{StaticResource RelayDispositionStyle}"
SelectedItem="{Binding SelectedGroup}" gs:DragDropExtension.ScrollOnDragDrop="True"
ItemContainerStyle="{StaticResource ItemContainerStyle}"
>
</ListBox>
<Style x:Key="RelayDispositionStyle" TargetType="{x:Type ListBox}" BasedOn="{StaticResource {x:Type ListBox}}">
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<UniformGrid Rows="{Binding ElementName=Racks, Path=SelectedItem.NoOfRows}"
Columns="{Binding ElementName=Racks, Path=SelectedItem.GroupsPerRow}"
HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,10,0,0">
</UniformGrid>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="RelayDispositionItemContainerStyle" TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush" Value="MidnightBlue"/>
</Style>