Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Scrollable Disabled ListBox in WPF

0.00/5 (No votes)
22 Feb 2010 1  
Many of you developing applications in WPF might have had the need to keep a ListBox disabled yet scroll it so that you can see the items in it. Say, in case you want to show the details to the user who can just view the details presented and not edit it, and some of the details might happen to...
Many of you developing applications in WPF might have had the need to keep a ListBox disabled yet scroll it so that you can see the items in it. Say, in case you want to show the details to the user who can just view the details presented and not edit it, and some of the details might happen to be in a ListBox.

As for the code, it is very simple. All I have done is created a custom control derived from ListBox, and added a Dependency Property, IsEnabledWithScroll. This property is directly bound with the IsEnabled property of the ItemsPresenter of the ListBox. By doing this, the scroll viewer is enabled even when the items are disabled.

I have changed the control template to reflect this, as shown below:


<Style TargetType="{x:Type local:ScrollableDisabledListBox}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Typelocal:ScrollableDisabledListBox}">
         <Border >
            <ScrollViewer IsEnabled="True"  >
                 <ItemsPresenter IsEnabled="{Binding Path= 
                  IsEnabledWithScroll, 
          RelativeSource={RelativeSource TemplatedParent}}" 
                          SnapsToDevicePixels="{TemplateBinding 
                             UIElement.SnapsToDevicePixels}"/>
                    </ScrollViewer>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>


You can always go ahead modifying the template, but remember to bind the ItemsPresenter IsEnabled property to the IsEnabledWithScroll property.

With this control in place, you should not be using the IsEnabled property of the ListBox. Go ahead and use the IsEnabledWithScroll property to enable/disable your control. Of course, you have the scrollable option enabled.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here