This list box allows items to be selected in groups by using the SHIFT key and mouse or the CTRL key and space key.
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:ListBoxEvent"
x:Class="ListBoxEvent.Pane1">
<Canvas.Resources>
<src:myColors x:Key="Colors"/>
</Canvas.Resources>
<StackPanel Margin="10, 10, 3, 3">
<WrapPanel Width="500" Orientation="Horizontal" Name="rectanglesPanel">
<WrapPanel.Resources>
<Style TargetType="Rectangle">
<Setter Property="Height" Value="20"/>
<Setter Property="Width" Value="20"/>
<Setter Property="Margin" Value="5"/>
</Style>
</WrapPanel.Resources>
</WrapPanel>
<ListBox Name="myListBox" HorizontalAlignment="Left" SelectionMode="Extended"
Width="265" Height="55" Background="HoneyDew" SelectionChanged="myListBox_SelectionChanged"
ItemsSource="{Binding Source={StaticResource Colors}}" IsSynchronizedWithCurrentItem="true">
</ListBox>
</StackPanel>
</Canvas>
//File:Window.xaml.vb
Imports System
Imports System.ComponentModel
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Documents
Imports System.Windows.Navigation
Imports System.Windows.Shapes
Imports System.Windows.Data
Imports System.Windows.Media
Imports System.Collections.ObjectModel
Namespace ListBoxEvent
Public Class myColors
Inherits ObservableCollection(Of String)
Public Sub New()
Add("LightBlue")
Add("Pink")
Add("Red")
Add("Purple")
Add("Blue")
Add("Green")
End Sub
End Class
Public Partial Class Pane1
Inherits Canvas
Public Sub New()
MyBase.New()
InitializeComponent()
End Sub
Private Sub myListBox_SelectionChanged(sender As Object, args As SelectionChangedEventArgs)
Dim converter As New BrushConverter()
For Each color As String In args.AddedItems
If GetRectangle(color) Is Nothing Then
Dim aRect As New Rectangle()
aRect.Fill = DirectCast(converter.ConvertFrom(color), Brush)
aRect.Tag = color
rectanglesPanel.Children.Add(aRect)
End If
Next
For Each color As String In args.RemovedItems
Dim removedItem As FrameworkElement = GetRectangle(color)
If removedItem IsNot Nothing Then
rectanglesPanel.Children.Remove(removedItem)
End If
Next
End Sub
Private Function GetRectangle(color As String) As FrameworkElement
For Each rect As FrameworkElement In rectanglesPanel.Children
If rect.Tag.ToString() = color Then
Return rect
End If
Next
Return Nothing
End Function
End Class
End Namespace
Related examples in the same category