#993 – Default Control Template for a ListBox
January 23, 2014 Leave a comment
The default control template used for a ListBox (in version 4.5 of the .NET Framework) is shown below. The template is included within a style that includes some other default property values.
The core structure of the ListBox is simple–an ItemsPresenter, within a ScrollViewer and surrounded by a Border.
<Window.Resources> <Style x:Key="lbDefaultStyle" TargetType="{x:Type ListBox}"> <Setter Property="Background" Value="White"/> <Setter Property="BorderBrush" Value="#FFABADB3"/> <Setter Property="BorderThickness" Value="1"/> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/> <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> <Setter Property="ScrollViewer.CanContentScroll" Value="True"/> <Setter Property="ScrollViewer.PanningMode" Value="Both"/> <Setter Property="Stylus.IsFlicksEnabled" Value="False"/> <Setter Property="VerticalContentAlignment" Value="Center"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ListBox}"> <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="1" SnapsToDevicePixels="True"> <ScrollViewer Focusable="False" Padding="{TemplateBinding Padding}"> <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> </ScrollViewer> </Border> <ControlTemplate.Triggers> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Background" TargetName="Bd" Value="White"/> <Setter Property="BorderBrush" TargetName="Bd" Value="#FFD9D9D9"/> </Trigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsGrouping" Value="True"/> <Condition Property="VirtualizingPanel.IsVirtualizingWhenGrouping" Value="False"/> </MultiTrigger.Conditions> <Setter Property="ScrollViewer.CanContentScroll" Value="False"/> </MultiTrigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources> <StackPanel> <ListBox Name="lbActors" Margin="15,5" Width="200" Height="200" ItemsSource="{Binding ActorList}" Style="{DynamicResource lbDefaultStyle}"/> </StackPanel>