Click here to Skip to main content
14,877,782 members
Articles / Desktop Programming / WPF
Tip/Trick
Posted 22 Feb 2010

Tagged as

Stats

19.9K views
3 bookmarked

Scrollable Disabled ListBox in WPF

Rate me:
Please Sign up or sign in to vote.
3.83/5 (5 votes)
22 Feb 2010CPOL
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, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Rahul P Nath
Software Developer Microsoft
India India
I am a programme and blogs at http://www.rahulpnath.com

Comments and Discussions

 
-- There are no messages in this forum --