C# – Writing a WPF Grid

cgridwpf

I need to write a WPF excel-like grid control. I'm new to WPF and can't quite work out where to start.

Should it derive from UserControl, FrameworkElement, or something else?

I need it to have horizontal and vertical scrollbars and a content area. Does that mean my grid control should have a DockPanel with the scrollbars, then another control for the content area so that my GridUserControl would have a DockPanel with 2 docked scrollbars and a GridContentFrameworkElement control?

Buying a grid is not an option.


This is what I decided on: I have a GridUserControl (derived from UserControl). It has a DockPanel with 2 docked ScrollBar objects. The main content area (GridContent) is another control derived from Panel. The content is drawn in GridContent.OnRender.

I did not go with a ScrollViewer since it wants to render the entire content area and then scroll that around. I only wanted to draw the bit of the content area that was currently visible since the grid can have millions of lines in it.

Best Answer

It should probably derive from either UserControl or ItemsControl (or something else in the ItemsControl hierarchy, such as Selector). If you are new to WPF it is probably best to derive from UserControl because creating a nice custom control requires a reasonable fluency with the idioms of WPF development as well as just the APIs.

Rather than trying to manage the scrolling area manually by creating explicit ScrollBar elements, consider using the ScrollViewer class. If you host your grid content within a ScrollViewer, and it is too large for the available display area, ScrollViewer will take care of displaying scroll bars and scrolling the content automatically.

Note that if you are looking for data grid-type functionality then there are various free, commercial and open source WPF data grids available, though these do tend to be biased towards tabular data editing rather than, say, Excel-like functionality.