ARTICLE

Mouse Scrolling in DataGrid in Silverlight 3

Posted by Diptimaya Patra Articles | Silverlight with C# October 14, 2009
In this article we will see how can we scroll with mouse for a DataGrid.
Reader Level:
Download Files:
 


Introduction

In this article we will see how can we scroll with mouse for a DataGrid.

Creating Silverlight Project

Fire up Visual Studio 2008 and create a new Silverlight 3 Project. Name it as MouseScroll.

1.gif

Add a Class to the Silverlight Project and name it as ScrollDataGrid.cs

Now inherit DataGrid to the class as follows:

public
class ScollDataGrid: DataGrid
{
}

You need to use the following namespaces in this class.

using
System.Windows.Automation.Peers;
using System.Windows.Automation.Provider;
using System.Windows.Automation;

Now write a method for OnMouseWheel as described below:

protected
override void OnMouseWheel(MouseWheelEventArgs e)
{
    base.OnMouseWheel(e);
    //Try getting the automationpeer from this datagrid
    AutomationPeer automationPeer = FrameworkElementAutomationPeer.FromElement(this);
    if (automationPeer == null)
    {
        //if not try creating a new one for this datagrid
        automationPeer = FrameworkElementAutomationPeer.CreatePeerForElement(this);
    }
    //Try getting the scroll provider for this datagrid
    IScrollProvider scrollProvider = automationPeer.GetPattern(PatternInterface.Scroll) as IScrollProvider;
    if (scrollProvider != null)
    {
        ScrollAmount scrollAmount = ScrollAmount.NoAmount;
        if (e.Delta < 0)
            scrollAmount = ScrollAmount.SmallIncrement;//for scroll down
        else if (e.Delta > 0)
            scrollAmount = ScrollAmount.SmallDecrement;//for scoll up 

        if (scrollProvider.VerticallyScrollable)
        {
            scrollProvider.Scroll(ScrollAmount.NoAmount, scrollAmount);
        }
    }
}

Now in the MainPage.xaml add the namespace as follows:

xmlns
:local="clr-namespace:MouseScroll"

Now place a DataGrid of type ScrollDataGrid and use the normal properties of DataGrid to look better.

<
local:ScollDataGrid x:Name="myDataGrid" Height="100" HorizontalAlignment="Left" VerticalAlignment="Top" Width="271" Margin="20,20,0,0" />

Now we will write some dummy data to fill in the DataGrid.

public
class PersonalData
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

Create a list of the above class and bind data to DataGrid.

public
partial class MainPage : UserControl
{
    List<PersonalData> myList;
    public MainPage()
    {
        InitializeComponent();
        #region Dummy List
        myList = new List<PersonalData
        {
            new PersonalData{ FirstName="FirstName1", LastName="LastName1", Age=39},
            new PersonalData{ FirstName="FirstName2", LastName="LastName2", Age=40},
            new PersonalData{ FirstName="FirstName3", LastName="LastName3", Age=41},
            new PersonalData{ FirstName="FirstName4", LastName="LastName4", Age=42},
            new PersonalData{ FirstName="FirstName5", LastName="LastName5", Age=43},
            new PersonalData{ FirstName="FirstName6", LastName="LastName6", Age=44},
            new PersonalData{ FirstName="FirstName7", LastName="LastName7", Age=45},
            new PersonalData{ FirstName="FirstName8", LastName="LastName8", Age=46},
            new PersonalData{ FirstName="FirstName9", LastName="LastName9", Age=47},
            new PersonalData{ FirstName="FirstName10", LastName="LastName10", Age=48},
            new PersonalData{ FirstName="FirstName11", LastName="LastName11", Age=49},
            new PersonalData{ FirstName="FirstName12", LastName="LastName12", Age=50},
            new PersonalData{ FirstName="FirstName13", LastName="LastName13", Age=51},
            new PersonalData{ FirstName="FirstName14", LastName="LastName14", Age=52},
        }; 
        #endregion
        myDataGrid.ItemsSource = myList;
    }
}

That's it now run your application and scroll the DataGrid with your mouse. 

2.gif

Hope this helps.

Login to add your contents and source code to this article
post comment
     

hello,what is the local:ScollDataGrid and data:DataGrid 's difference?In  the project I use data:DataGrid.

Posted by zhang yu May 10, 2010

local:ScollDataGrid   data:DataGrid    ??????

Posted by zhang yu May 10, 2010

You will be happy to know that, Microsoft has added Scrolling behaviour for all scrollable controls in Silverlight 4. I have tried it. Working great.

Posted by Diptimaya Patra Feb 18, 2010

It's great... It's incredible that this function is not available for default.

Posted by Facu Baez Feb 18, 2010

 Diptimaya.This is what i am looking for. Thank for your effort.

Posted by Alex Zhang Jan 19, 2010
COMMENT USING
PREMIUM SPONSORS
Over-C is a holistic consortium of communications and technology specialists. We build, deploy and market both business as well as consumer products and solutions.
Get Career Advice from Experts
SPONSORED BY
  • PDF reports have never been easier to create. With our included WYSIWYG Designer, you can layout your reports, set up your data source and let DynamicPDF ReportWriter do the rest.
Join a Chapter