Jerry Nixon @Work: Windows 8 Beauty Tip: Using a VariableSizedWrapGrid in a GridView makes Grids Prettier

Jerry Nixon on Windows

Thursday, August 23, 2012

Windows 8 Beauty Tip: Using a VariableSizedWrapGrid in a GridView makes Grids Prettier

imageUsing a GridView in XAML is the primary way to show lists of data. The GridView inherits ItemsControl and behaves like the ListView which behaves like a classic ListBox. The GridView scrolls horizontally, handles selection, rearrangement, and (as we see in this article) also allows for variable sited items.

The GridView’s ItemsPanel is a WrapGrid by default. Unlike a VariableSizedWrapGrid, the WrapGrid creates a strictly uniform grid of items. It’s beautiful, actually. The VariableSizedWrapGrid, on the other hand, lets developers create custom and create UI.

Summary

To accomplish a variable grid, the VariableSizedWrapGrid.ColSpan and RowSpan properties must be set on the GridViewItem. Unfortunately, it is impossible to bind to the GridViewItem directly. As a result, it is necessary to create a custom GridView inheriting from GridView and implementing PrepareContainerForItemOverride. The resulting control behaves like a standard GridView with the exception that it sets the GridViewItem ColSpan and RowSpan attached properties.

Look: WrapGrid implementation

WinRT XAML WrapGrid

Look: VariableSizedWrapGrid implementation

WinRT XAML VariableSizedWrapGrid

Implementing the Variable grid includes three important steps: 1) inheriting GridView and implementing the PrepareContainerForItemOverride method, 2) changing the ItemPanelTemplate to be a VariableSizedWrapGrid, and 3) include custom ColSpan and RowSpan properties in the models you bind to the repeater. That last one is important.

image

Let’s see it!

Video References

Conclusion

A unique UI is important to make your application stand out. Changing up the grid from the standard, vanilla, boring grid is a great start. Use these techniques to implement the variable grid into your app and start making a splash!

Best of luck!