Mega Code Archive

 
Categories / VB.Net Tutorial / WPF
 

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