Overview of UI Development for Windows Store Apps Magenta Purple Teal Lime Brown Pink Orange Blue Red Green 05830: Advanced User Interface Software YoungSeok Yoon April 2nd, 2013 Institute for Software Research Carnegie Mellon University (youngseok@cs.cmu.edu) What will be covered today? Introduction to Windows Store Apps XAML Language Projection Dynamic Layout What is a Windows Store app? A new type of application that runs on Windows 8 devices (e.g., Microsoft Surface) Tile-based look-and-feel (Windows 8 style UI) Used to be called ‘Metro-Style App’ Relatively new: Windows 8 was officially released in Oct. 2012. Introduction to Windows Store Apps 3 Example Windows Store Apps Introduction to Windows Store Apps 4 Example Windows Store Apps Introduction to Windows Store Apps 5 Example Windows Store Apps Introduction to Windows Store Apps 6 Example Windows Store Apps Introduction to Windows Store Apps 7 Example Windows Store Apps Introduction to Windows Store Apps 8 Example Windows Store Apps Introduction to Windows Store Apps 9 Windows Runtime (WinRT) A layer on which all the Windows Store apps run (similar to Java Virtual Machine, .NET Framework) Unlike iOS/Android apps, Windows Store apps can run on Windows 8 desktop without any simulator Not to be confused with “Windows RT”, which is an operating system designed for tablet devices Introduction to Windows Store Apps 10 Windows 8 Architecture Image Source: http://www.engadget.com/2011/09/13/windows-8-store-to-sell-both-metro-style-apps-and-conventional-w/ Introduction to Windows Store Apps 11 What will be covered today? Introduction to Windows Store Apps XAML Language Projection Dynamic Layout “Building apps using what you know” Several languages can be used XAML HTML + CSS DirectX + + + C# / VB / C++ JavaScript C++ UI Logic WinRT APIs can be directly used by all languages These APIs are projected to each language Language Projection 13 VS. Cross-Platform App Development Cross-platform mobile app development approaches Language projection in Windows Store app development Application Code C# Application Code VB Application Code JavaScript Application Code Crossplatform framework C# Projection VB Projection JavaScript Projection Native API Native API Native API Windows Runtime Target platform #1 Target platform #2 … Target devices Language Projection 14 A simple example: HelloWorldApp Spec XAML+C# HTML5+JavaScript A button control is in the center of the screen. When clicked, it shows a standard message dialog saying “Hello, world!” Language Projection 15 A simple example: HelloWorldApp Spec XAML+C# HTML5+JavaScript <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <Button x:Name="button1" Content="Click Me!" HorizontalAlignment="Center" VerticalAlignment="Center" /> </Grid> XAML code for button // Event handler binding (in some initialization code) this.button1.Click += button1_Click; // Event handler method private async void button1_Click(object sender, RoutedEventArgs e) { MessageDialog dlg = new MessageDialog("Hello, world!", "AUIS"); await dlg.ShowAsync(); } C# code behind Language Projection 16 A simple example: HelloWorldApp Spec XAML+C# HTML5+JavaScript <body> <div id="mainContent"> <button id="button1"> Click Me!</button> </div> </body> #mainContent { width: 100%; height: 100%; display: -ms-grid; -ms-grid-rows: 1fr; -ms-grid-columns: 1fr; } #button1 { -ms-grid-row-align: center; -ms-grid-column-align: center; } HTML code for button CSS code for centering the button // Event handler binding (in some initialization code) var button1 = document.getElementById("button1"); button1.addEventListener("click", button1Click, false); // Event handler function function button1Click(mouseEvent) { var dlg = new Windows.UI.Popups.MessageDialog("Hello, world!", "AUIS"); dlg.showAsync(); } JavaScript code behind Language Projection 17 Results Language Projection 18 Results Language Projection 19 What will be covered today? Introduction to Windows Store Apps XAML Language Projection Dynamic Layout XAML Overview XAML: eXtensible Application Markup Language XML-based declarative language for UI Each XML element maps to an object instance Each attribute maps to a property of object Event handlers can be declared Still the handlers should be implemented in the code-behind … more features (will be explained shortly) XAML 21 Tools for Editing XAML Visual Studio 2012 Blend for VS 2012 Mainly for programmers Mainly for UI designers Most of the XAML editing features are provided Visual states can be seen/edited without compiling Can program application logic Can create complex animations XAML 22 XAML Editor in Visual Studio 2012 XAML 23 Blend for Visual Studio 2012 XAML 24 Shapes in XAML Unlike many other declarative UI languages, non-widget shapes are supported in XAML XAML 25 Resource Binding Any property values can be stored as resources and then be reused System resources (system-wide predefined values) Local resources (stored in local XAML) Hard-coded local values can easily be converted to a resource XAML 26 Converting Local Value to a Resource Click The black little box on the right indicates that this value is local XAML The user provides a name for the new resource, and where to put it Now the box turned into green which indicates static resource 27 Resulting XAML <x:String x:Key="MyButtonText">Click Me!</x:String> The resulting resource definition <Button x:Name="button1" Content="{StaticResource MyButtonText}" HorizontalAlignment="Center" VerticalAlignment="Center" /> The button using the resource XAML 28 Styles Many UI elements of a same style can be used e.g., The following buttons use “AppBarButtonStyle” A style defines visual property settings of UI elements A style can be inherited to create a new style XAML 29 A style example <Page.Resources> <Style TargetType="Button"> <Setter Property="BorderThickness" Value="5" /> <Setter Property="Foreground" Value="Blue" /> <Setter Property="BorderBrush" > <Setter.Value> <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1"> <GradientStop Color="Yellow" Offset="0.0" /> <GradientStop Color="Red" Offset="0.25" /> <GradientStop Color="Blue" Offset="0.75" /> <GradientStop Color="LimeGreen" Offset="1.0" /> </LinearGradientBrush> </Setter.Value> </Setter> </Style> </Page.Resources> A style definition for buttons Source: http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh465381.aspx XAML 30 Data Binding Data binding can be used between two properties, as long as the following conditions are met: 1) Data source implements INotifyPropertyChanged interface 2) The two properties have the same data type, or there is a data converter XAML UI elements all implement INotifyPropertyChanged interface OneTime / OneWay / TwoWay XAML 31 Data Binding Dialog Button is enabled only if the toggle switch is on XAML 32 More Data Binding Examples (1) NOTE: Any value can be converted to a string using Object#ToString() method Displays slider.Maximum (OneWay) Displays slider.Minimum (OneWay) Displays slider.Value (TwoWay) XAML 33 More Data Binding Examples (2) Show / hide a group of elements with a switch? Expected behavior: Not trivial, because of the data type mismatch XAML Visibility (Enum) Visible Collapsed IsOn (Boolean) True False Target Property Source Property 34 More Data Binding Examples (2) A data converter is needed, which can be reused XAML 35 What will be covered today? Introduction to Windows Store Apps XAML Language Projection Dynamic Layout Scaling UI Elements There is a special UI element called Viewbox, whose sole purpose is to resize content Dynamic Layout Stretch=“None” No stretch at all Stretch=“Fill” Stretch to fill the entire space Stretch=“Uniform” Stretch while keeping the aspect ratio Stretch=“UniformToFill” Aspect ratio is preserved but the source content is clipped as necessary 37 Truetype Font for UI Symbols Instead of using bitmap images, frequently used UI symbols are defined in a true-type font called “Segoe UI Symbol” Dynamic Layout 38 Grid Control and Auto/Star Sizing Grid control provides a flexible way to distribute available screen space Three ways of specifying a cell size (height of a row / width of a column) 1) Pixels 2) “Auto” – fits to the child elements in the cell 3) Star notation – represents a fraction of the remaining available space Dynamic Layout 39 An Example Grid Some Tool Controls Auto * 2* Dynamic Layout * * 40 Semantic Zoom Control SemanticZoom control provides two-level zoomable view composed of any two IZoomableView controls Two ListView controls are the most commonly used Image Source: http://msdn.microsoft.com/en-us/library/windows/apps/hh465492.aspx Dynamic Layout 41 Project Templates Visual Studio provides 3 project templates Blank App, Grid App, Split App Grid / Split App comes with useful features DataConverters BooleanNegationConverter, BooleanToVisibilityConverter LayoutAwarePage Pre-defined visual states (snapped, portrait, landscape, …) SuspensionManager Storing/restoring UI states upon switching between apps Problems Often too heavy for simple apps Premature commitment – very difficult to change later Dynamic Layout 42 Grid App Template – 3 Levels Dynamic Layout 43 Split App Template – 2 Levels Dynamic Layout 44 CONCLUSION 45 Other interesting aspects of Windows Store app development Asynchronous programming Windows charms / App bar Live tiles … 46 Conclusion Windows App Store is a newly emerging sociotechnical ecosystem Most of these techniques are not dramatically new, but well put together to create a developer-friendly environment Probably too soon to judge whether this platform is successful or not Students can register for a Windows Store developer account for free, via Dreamspark program 47 Q&A Thank you! References MSDN: Developing Windows Store apps (http://msdn.microsoft.com/en-us/library/windows/apps/xaml/br229566.aspx) MSDN: White papers for Windows Store apps (http://msdn.microsoft.com/en-US/library/windows/apps/hh465413) Jeremy Likness, “Building Windows 8 Apps with C# and XAML,” Addison-Wesley Professional 48