Два способа сделать это:
Один из них - реализовать логическое свойство IsFirstItem
в модели представления, для которой установлено значение true, когда элемент является первым элементом в любой коллекции, в которой он содержится.(Это предполагает, что элемент может содержаться только в одной коллекции, и что элементы имеют доступ к своей содержащей коллекции, что не всегда так.) Затем добавьте стиль к Border
:
<Style TargetType="Border">
<Setter Property="BorderThickness" Value="0,1,0,0"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsFirstItem}" Value="True">
<Setter Property="BorderThickness" Value="0"/>
</DataTrigger>
</Style.Triggers>
</Style>
Другой способ - создать объект-заполнитель и добавить его в конец (или начало) коллекции.Затем используйте выбор шаблона, чтобы отобразить его с шаблоном, отличным от обычных элементов, например:
<ListBox.Resources>
<DataTemplate TargetType="{x:Type MyRealItem}">
<!-- what most items should look like -->
</DataTemplate>
<DataTemplate TargetType="{x:Type MyPlaceholderItem}">
<!-- what the placeholder item should look like -->
</DataTemplate>
</ListBox.Resources>
<ListBox.ItemTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding}"/>
</DataTemplate>
</ListBox.ItemTemplate>
Если, например, он в конце, вы можете дать заполнителю отрицательный верхний край той же ширины.в качестве толщины границы - так что в основном вы рисуете прямоугольник цвета фона поверх нижней границы последнего элемента в вашем списке.