Surface Development Part 2: Surface Controls

Are you familiar with WPF?  If so, you’re most of the way there with Surface development!  Many of the Surface controls derive from and have similar functionality to corresponding WPF controls, but provide extra enhancements for the Surface.  For example, the Surface’s SurfaceWindow has very close functionality to the WPF Window, except the SurfaceWindow runs full screen on the Surface (because all Surface apps run maximized on the Surface space) and automatically orients the display toward the user (since the Surface is a 360-degree environment).  The table below illustrates some examples of WPF controls, the equivalent Surface controls, and the extra functionality that the Surface control gives to support the Surface multi-touch experience.

WPF Control Surface Control Extra Functionality in Surface Control
Window SurfaceWindow Runs full screen on the Surface, oriented towards the user
Menu SurfaceMenu Multiple menus can be used at the same time (multi-touch support)
Button SurfaceButton Only “clicks” when all fingers are removed from button
ListBox SurfaceListBox Determines scrolling vs. select, allows flicking gesture to scroll through list, provides elastic effect when end of list is reached
ScrollBar SurfaceScrollBar Allows flicking, scroll bar grows thicker to better fit finger when touched and then returns to original thin UI
TextBox SurfaceTextBox Invokes virtual keyboard oriented towards user when touched

Of course, this is not a comprehensive list of controls.  There are many more Surface controls than just these.  For example, in addition to the SurfaceButton, there is a SurfaceRadioButton, SurfaceCheckBox, and SurfaceToggleButton, and they share the extra functionality of only clicking when all contacts are removed from the control.  So if two users touch a SurfaceButton or one of these other controls, and then one user lifts his finger, the "Click" event will not fire until the second user lifts her finger too. 

However, this table does demonstrate the broad categories of controls available, and gives you a flavor for the extra functionality that you get with the Surface version - support for multi-touch, the 360-degree environment, and the other unique attributes of Surface. 

Finally, the Surface SDK (where these controls live) is not available to the public at this point.  The Surface team has given away access at major conferences such as PDC if you attended the Surface sessions or tried the Surface hands-on labs.  You also get access to the Surface SDK when you purchase a Surface developer unit.  If you have a serious interest in Surface development, let me know.