Mega Code Archive

 
Categories / VB.Net Tutorial / WPF
 

Change the Appearance of Alternate Items in a List

<Window x: Class="WpfApplication1.Window1"     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"     xmlns:local="clr-namespace:WpfApplication1;assembly="     Title="WPF" Height="248" Width="128">     <Window.Resources>         <local:Countries x:Key="countries"/>         <Style x:Key="AlternateStyle">             <Setter Property="ListBoxItem.Background" Value="LightGray"/>         </Style>     </Window.Resources>     <Grid>         <ListBox DisplayMemberPath="Name" ItemsSource="{Binding Source={StaticResource countries}}" >             <ListBox.ItemContainerStyleSelector>                 <local:AlternatingRowStyleSelector AlternateStyle="{StaticResource AlternateStyle}" />             </ListBox.ItemContainerStyleSelector>         </ListBox>     </Grid> </Window> //File:Window.xaml.vb Imports System.Windows Imports System.Windows.Controls Imports System.Collections.ObjectModel Namespace WpfApplication1   Public Class AlternatingRowStyleSelector     Inherits StyleSelector     Public Property DefaultStyle() As Style       Get         Return m_DefaultStyle       End Get       Set         m_DefaultStyle = Value       End Set     End Property     Private m_DefaultStyle As Style     Public Property AlternateStyle() As Style       Get         Return m_AlternateStyle       End Get       Set         m_AlternateStyle = Value       End Set     End Property     Private m_AlternateStyle As Style     Private isAlternate As Boolean = False     Public Overrides Function SelectStyle(item As Object, container As DependencyObject) As Style       Dim style As Style = If(isAlternate, AlternateStyle, DefaultStyle)       isAlternate = Not isAlternate       Return style     End Function   End Class   Public Class Country     Private m_name As String     Private m_continent As Continent     Public Sub New(name As String, continent As Continent)       Me.m_name = name       Me.m_continent = continent     End Sub     Public Property Name() As String       Get         Return m_name       End Get       Set         m_name = value       End Set     End Property     Public Property Continent() As Continent       Get         Return m_continent       End Get       Set         m_continent = value       End Set     End Property   End Class   Public Enum Continent     Europe     NorthAmerica   End Enum   Public Class Countries     Inherits Collection(Of Country)     Public Sub New()       Me.Add(New Country("Great Britan", Continent.Europe))       Me.Add(New Country("USA", Continent.NorthAmerica))       Me.Add(New Country("Canada", Continent.NorthAmerica))     End Sub   End Class End Namespace