<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.cs using System; using System.ComponentModel; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Data; using System.Windows.Media; using System.Collections.ObjectModel; namespace ListBoxEvent { public class myColors : ObservableCollection<string> { public myColors() { Add("LightBlue"); Add("Pink"); Add("Red"); Add("Purple"); Add("Blue"); Add("Green"); } } public partial class Pane1 : Canvas { public Pane1() : base() { InitializeComponent(); } void myListBox_SelectionChanged(object sender, SelectionChangedEventArgs args) { BrushConverter converter = new BrushConverter(); foreach (string color in args.AddedItems) { if (GetRectangle(color) == null) { Rectangle aRect = new Rectangle(); aRect.Fill = (Brush) converter.ConvertFrom(color); aRect.Tag = color; rectanglesPanel.Children.Add(aRect); } } foreach (string color in args.RemovedItems) { FrameworkElement removedItem = GetRectangle(color); if (removedItem != null) { rectanglesPanel.Children.Remove(removedItem); } } } FrameworkElement GetRectangle(string color) { foreach (FrameworkElement rect in rectanglesPanel.Children) { if (rect.Tag.ToString() == color) return rect; } return null; } } }