In several scenarios we disables list box preventing user to do any action against list items. When you disable list box it also disables scrollbars preventing scrolling of list items. However in some cases we might want to show scrollable disabled items to view list contents. To solve this issue there are various options available including implementation of custom list box with properties to enable scrolls. Following code snippet shows a
technique to disable only list items allowing user to scroll items. Note the ScrollViewer and ItemsPresenter properties in list box control template which governs enabling scrollbars while disabling list items.
<Window x:Class="WpfTest.Window2" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window8" Height="300" Width="300">
<ListBox Margin="10,10,10,10" Height="130" Width="100">
<ListBox.Resources>
<Style TargetType="ListBox" >
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBox">
<Border BorderBrush="Black" BorderThickness="1">
<ScrollViewer IsEnabled="True" >
<ItemsPresenter IsEnabled="False"
SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}"/>
</ScrollViewer>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.Resources>
<ListBoxItem>Item 1</ListBoxItem>
<ListBoxItem>Item 2</ListBoxItem>
<ListBoxItem>Item 3</ListBoxItem>
<ListBoxItem>Item 4</ListBoxItem>
<ListBoxItem>Item 5</ListBoxItem>
<ListBoxItem>Item 6</ListBoxItem>
<ListBoxItem>Item 7 - Long length item</ListBoxItem>
<ListBoxItem>Item 8</ListBoxItem>
<ListBoxItem>Item 9</ListBoxItem>
</ListBox>
</Window>