For all the neighbors there ... do not lose hope! It can be done!
I started with VSS to right-click on the list and use each “Edit Template” and “Edit Additional Templates” for each available item until I find how it works.
You start quite simply with the list box associated with MVVM as usual.
<ListBox Width="100" x:Name="myComboBox" Margin="8" ItemsSource="{Binding ListBoxListSource}" SelectedIndex="{Binding ListBox}"> </ListBox>
There are several things that are set in UserControl or Window Resources ....
ListBoxStyle . This stylizes the main container of the list, you can set borders, margins, indents, etc. the main window is here. For my example, I just get rid of everything to undo it.
<UserControl.Resources> <Style x:Key="ListBoxStyle" TargetType="{x:Type ListBox}"> <Setter Property="Background" Value="Transparent"/> <Setter Property="Foreground" Value="Transparent"/> <Setter Property="BorderBrush" Value="Transparent"/> <Setter Property="BorderThickness" Value="0"/> <Setter Property="Padding" Value="0"/> <Setter Property="Margin" Value="0"/> </Style> </UserControl.Resources>
ItemContainerStyle . This is the bit that people say cannot be renamed - it contains the "window-selector-blue" panel when selecting an item, but don't be afraid of it. (merging of this section of UserControl.Resources in combination with the previous one).
This section → changing the ItemContainer template from anywhere in Border, setting the top 3 edge for scrolling and customizing the style. Everything we do with this style adds a 3px transparent border to the left and right of the element. Then in Triggers> IsSelected (target myBorder), changing the Brush border to Red.
<UserControl.Resources> <Style x:Key="ItemContainerStyle" TargetType="{x:Type ListBoxItem}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ListBoxItem}"> <Border x:Name="myBorder" Padding="0" Margin="0 3 0 0" SnapsToDevicePixels="true" Style="{DynamicResource borderContent}"> <ContentPresenter /> </Border> <ControlTemplate.Resources> <Style x:Key="borderContent" TargetType="Border"> <Setter Property="BorderThickness" Value="3 0 3 0"/> <Setter Property="BorderBrush" Value="Transparent"/> </Style> </ControlTemplate.Resources> <ControlTemplate.Triggers> <Trigger Property="IsSelected" Value="true"> <Setter TargetName="myBorder" Property="BorderBrush" Value="Red"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </UserControl.Resources>
ListBoxItemDataTemplate . The next step is to create an element container that displays your data. In my example, YourTextBlockStyler has a trigger on the Text> binding and changes the foreground and background colors of the text. Note that the foreground and background of the Listbox style are set to transparency, so you have to retell them in the TextBlock style if you want to see something.
<UserControl.Resources> <DataTemplate x:Key="ListBoxItemDataTemplate"> <TextBlock Text="{Binding}" Style="{StaticResource YourTextBlockStyler}"/> </DataTemplate> </UserControl.Resources>
Back to the list . Now we have set all the styles and templates in the Resources section, where we can update the list with Style = "ItemContainerStyle =" "and ItemTemplate =" "
<ListBox Width="100" x:Name="myComboBox" Margin="8" ItemsSource="{Binding ListBoxListSource}" SelectedIndex="{Binding ListBox}" Style="{StaticResource ListBoxStyle}" ItemContainerStyle="{StaticResource ItemContainerStyle}" ItemTemplate="{StaticResource ListBoxItemDataTemplate}"> </ListBox>
Then your raster list is converted magically into a completely redesigned list with a red border selector
Of
in 
All without editing one System.ResourceBrush =]