03.controls in windows phone

65
Building Windows Phone Applications Nguyen Tuan | Microsoft Certified Trainer

Upload: nguyen-tuan

Post on 22-Nov-2014

59 views

Category:

Mobile


2 download

DESCRIPTION

Windows Phone 8 progamming

TRANSCRIPT

Page 1: 03.Controls in Windows Phone

Building Windows PhoneApplications

Nguyen Tuan | Microsoft Certified Trainer

Page 2: 03.Controls in Windows Phone

Agenda

• Page navigation

• Application Bar

• Page Orientation

• Screen Resolutions

• Localization

• Windows Phone Toolkit

• Page Transitions

Page 3: 03.Controls in Windows Phone

Page Navigation

Page 4: 03.Controls in Windows Phone

• Frame• Top-level container control• PhoneApplicationFrame class• Contains the page control and system

elements such as system tray and application bar

• Page• Fills entire content region of the frame• PhoneApplicationPage-derived class• Contains a title• Optionally surfaces its own application bar

Frame and Page

Page 5: 03.Controls in Windows Phone

Page Navigation

• XAML apps on Windows Phone use a page-based navigation model

• Similar to web page model

• Each page identified by a URI

• Each page is essentially stateless

private void HyperlinkButton_Click_1(object sender, RoutedEventArgs e)

{NavigationService.Navigate(new Uri("/SecondPage.xaml", UriKind.Relative));

}

Page 6: 03.Controls in Windows Phone

Navigating Back

• Application can provide controls to navigate back to preceding page

• The hardware Back key will also navigate back to preceding page

• No code required – built-in behaviour

private void Button_Click_1(object sender, RoutedEventArgs e)

{NavigationService.GoBack();

}

Page 7: 03.Controls in Windows Phone

Overriding Back Key• May need to override Back hardware key if ‘back to previous page’ is

not logical behaviour• For example, when displaying a popup panel

• User would expect Back key to close the panel, not the page

Page 8: 03.Controls in Windows Phone

Overriding the Back Key

8

<phone:PhoneApplicationPagex:Class="PhoneApp1.MainPage"…shell:SystemTray.IsVisible="True"BackKeyPress="PhoneApplicationPage_BackKeyPress">

In code:private void PhoneApplicationPage_BackKeyPress(object sender,

System.ComponentModel.CancelEventArgs e){

e.Cancel = true; // Tell system we've handled it

// Hide the popup......

}

Page 9: 03.Controls in Windows Phone

Passing Data Between Pages

• Can pass string data between pages using query strings

• on destination page

private void passParam_Click(object sender, RoutedEventArgs e){

NavigationService.Navigate(new Uri("/SecondPage.xaml?msg=" + textBox1.Text, UriKind.Relative));}

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)

{

base.OnNavigatedTo(e);

string querystringvalue = "";

if (NavigationContext.QueryString.TryGetValue("msg", out querystringvalue))

textBlock1.Text = querystringvalue;

}

Page 10: 03.Controls in Windows Phone

Passing Objects Between Pages

• Often, you will pass a data object from one page to another

• E.g., user selects an item in a list and navigates to a Details page

• One solution is to store your ViewModel (that is, data) in your App class

• Global to whole application

• Pass the ID of the selected item in query string

// Navigate to the new pageNavigationService.Navigate(new Uri("/DetailsPage.xaml?selectedItem=" + (MainLongListSelector.SelectedItem as ItemViewModel).ID, UriKind.Relative));

Page 11: 03.Controls in Windows Phone

Handling Non Linear Navigation

• Design your app navigation strategy carefully!

• If you navigate from ‘third page’ to ‘main page’ and your user then presses the Back key, what happens?

• User expects app to exit• App actually navigates back to Third Page

• Solution for Windows Phone 7.0 was complex code to handle back navigation correctly, or the Non-Linear Navigation Recipe library from AppHub

• Windows Phone APIs:• NavigationService.RemoveBackEntry()

11

Page 12: 03.Controls in Windows Phone

NavigationService.RemoveBackEntry()• When ‘Third Page’ navigates back to MainPage, put a marker in the query string

• In OnNavigatedTo() in MainPage, look for the marker and if present, remove the ‘ Third Page’, ‘SecondPage’ and original instance of ‘MainPage’ from the navigation history stack

12

NavigationService.Navigate(new Uri("/MainPage.xaml?homeFromThird=true", UriKind.Relative));

protected override void OnNavigatedTo(NavigationEventArgs e){

if (e.NavigationMode == System.Windows.Navigation.NavigationMode.New&& NavigationContext.QueryString.ContainsKey("homeFromThird"))

{ NavigationService.RemoveBackEntry(); // Remove ThirdPageNavigationService.RemoveBackEntry(); // Remove SecondPageNavigationService.RemoveBackEntry(); // Remove original MainPage

}base.OnNavigatedTo(e);

}

Page 13: 03.Controls in Windows Phone

Demo NavigationApp

13

Page 14: 03.Controls in Windows Phone

ApplicationBar

Page 15: 03.Controls in Windows Phone

Application Chrome System Tray and Application Bar

Page 16: 03.Controls in Windows Phone

Don’t fill all 4 slots if not needed

Use the ApplicationBar instead of creating your own menu system

Up to 4 buttons plus optional menuSwipe up the bar to bring up the menu

Swipe up the bar to bring up the menu

ApplicationBar

Page 17: 03.Controls in Windows Phone

ApplicationBar in Xaml

17

<phone:PhoneApplicationPagex:Class="CRMapp.MainPage“…>

<phone:PhoneApplicationPage.ApplicationBar><shell:ApplicationBar x:Name="AppBar" Opacity="1.0" IsMenuEnabled="True">

<shell:ApplicationBar.Buttons><shell:ApplicationBarIconButton x:Name="NewContactButton" IconUri="Images/appbar.new.rest.png"

Text="New" Click="NewContactButton_Click"/><shell:ApplicationBarIconButton x:Name="SearchButton" IconUri="Images/appbar.feature.search.rest.png"

Text="Find" Click="SearchButton_Click"/></shell:ApplicationBar.Buttons><shell:ApplicationBar.MenuItems>

<shell:ApplicationBarMenuItem x:Name="GenerateMenuItem" Text="Generate Data"Click="GenerateMenuItem_Click" />

<shell:ApplicationBarMenuItem x:Name="ClearMenuItem" Text="Clear Data"Click="ClearMenuItem_Click" />

</shell:ApplicationBar.MenuItems></shell:ApplicationBar>

</phone:PhoneApplicationPage.ApplicationBar>

</phone:PhoneApplicationPage>

Page 18: 03.Controls in Windows Phone

ApplicationBar and Landscape

ApplicationBar paints on side of screen in landscape

Has built-in animation when page switches orientation

Page 19: 03.Controls in Windows Phone

If Application Bar opacity is less than 1, displayed page will be the size of the screen Application Bar overlays screen content

If Opacity is 1, displayed page is resized to the area of the screen not covered by the Application Bar

ApplicationBar Opacity

19

Page 20: 03.Controls in Windows Phone

ApplicationBar Design in Blend – and now in VS Too!

Page 21: 03.Controls in Windows Phone

DemoApplicationBar

21

Page 22: 03.Controls in Windows Phone

Handling Screen Orientation Changes

Page 23: 03.Controls in Windows Phone

Phone UI Design – Orientation

• This application does not work in landscape mode at the moment

• Not all applications do, or need to

• You can configure applications to support portrait or landscape

23

Page 24: 03.Controls in Windows Phone

New Device Tab in Visual Studio 2012

• View Designer in Portrait or Landscape

8/16/2014 24

Page 25: 03.Controls in Windows Phone

Selecting Orientations

• A XAML property for the phone application page lets you select the orientation options available

• Your application can bind to an event which is fired when the orientation changes

25

SupportedOrientations="Portrait"

SupportedOrientations="PortraitOrLandscape"

Page 26: 03.Controls in Windows Phone

Layout May Need Altering

8/16/2014 26

Layout unaltered

Layout optimised for landscape

Page 27: 03.Controls in Windows Phone

Using a Grid to Aid Landscape Layout

• In the Grid, the second column is unused in Portrait

27

<phone:PivotItem Header="recipe"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/>

</Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="240"/><RowDefinition Height="*"/><RowDefinition Height="Auto"/>

</Grid.RowDefinitions>...

</Grid>

Row 0

Row 1

Row 2

Row 3

Column 0

Page 28: 03.Controls in Windows Phone

Move Elements in Landscape Layout

• In Landscape, the recipe description moves into the second row and the second column and the third row of the grid is now unused. Since that row’s Height is “*”, it shrinks to zero.

28

<phone:PivotItem Header="recipe"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/>

</Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="240"/><RowDefinition Height="*"/><RowDefinition Height="Auto"/>

</Grid.RowDefinitions>...

</Grid>

Row 0

Row 1

Row 2

Row 3

Column 0 Column 1

Page 29: 03.Controls in Windows Phone

Moving Elements

private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e) {

if (this.Orientation == PageOrientation.LandscapeLeft || this.Orientation == PageOrientation.LandscapeRight)

{DirectionsScrollViewer.SetValue(Grid.RowProperty, 1);DirectionsScrollViewer.SetValue(Grid.ColumnProperty, 1);

}else{

DirectionsScrollViewer.SetValue(Grid.RowProperty, 2);DirectionsScrollViewer.SetValue(Grid.ColumnProperty, 0);

}}

8/16/2014 29

Page 30: 03.Controls in Windows Phone

DemoLandScape Orietation

Page 31: 03.Controls in Windows Phone

Supporting Multiple Screen Resolutions

Page 32: 03.Controls in Windows Phone

Multiple Resolutions

Page 33: 03.Controls in Windows Phone

Multiple Resolutions – Scaling & Touch

720p

720x1280

WVGA

480x800

Page 34: 03.Controls in Windows Phone

• Well, No…

• As developers, we work with device independent pixels• OS applies a scale factor to the actual resolution

So I Have to Do Three Different UIs?

8/16/2014 34

Resolution Aspect ratio Scale Factor Scaled resolution

WVGA 800 x 480 15:9 1.0x scale 800 x 480

WXGA 1280 x 768 15:9 1.6x scale 800 x 480

720p 1280 x 720 16:91.5x scale, 80 pixels taller (53 pixels, before scaling)

853 x 480

Page 35: 03.Controls in Windows Phone

Scaled Resolutions

WVGA WXGA 720p

80

0

80

0 85

3

480480

480

Page 36: 03.Controls in Windows Phone

• Set Grid Row Height to “Auto” to size according to the controls placed within it

• Set Grid Row Height to “*” to take up all the rest of the space

• If you size multiple rows using “*”, available space is divided up evenly between them

Use “Auto” and “*” on Grid Rows To Ensure Good Layout

8/16/2014 36

<Grid><Grid.RowDefinitions><RowDefinition Height="240"/><RowDefinition Height="*"/><RowDefinition Height="Auto"/>

</Grid.RowDefinitions>...</Grid>

Page 37: 03.Controls in Windows Phone

Adaptive Layout Using Grid

8/16/2014 37

WVGA 720p

Image height sized explicitly at 240px

Bottom row is “Auto” so sized to hold a TextBlock

Directions row is “*” so gets everything that’s left – ends

up taller on 720p

Page 38: 03.Controls in Windows Phone

• In most cases, you should supply images targeting the WXGA (1280 x 768) screen

• WXGA assets are of the highest quality• Will automatically scale down on WVGA phones• Still look great on 720p (1280 x 720)

• If you want, you can include images at each of the three resolutions in your project

• E.g. MyImage.wvga.png, MyImage.wxga.png and MyImage.720p.png• At runtime, get Application.Current.Host.Content.ScaleFactor to determine the resolution

of the screen on the current phone, returns 100 for WVGA, 160 for WXGA and 150 for 720p• Write code to load image at runtime appropriate for the current screen resolution

Images

8/16/2014 38

Page 39: 03.Controls in Windows Phone

• To add a splash screen to your project suitable for all resolutions, add a file as content called SplashScreenImage.jpg at 768 x 1280 resolution

• The framework automatically scales it to the correct size on different resolution screens

• If you want to provide pixel-perfect splash screens for all resolutions, add images with the following names:

• SplashScreenImage.Screen-WVGA.jpg• SplashScreenImage.Screen-WXGA.jpg• SplashScreenImage.Screen-720p.jpg

• In addition to these images, you must still include the default SplashScreenImage.jpg file

Splash Screens

8/16/2014 39

Page 40: 03.Controls in Windows Phone

• You must supply app icon and tile images sized for WXGA

• The framework automatically scales to the correct size for WVGA and 720p

App Icon and Tiles

8/16/2014 40

Tile size WXGA

Application Icon 100 × 100

Small 159 × 159

Medium 336 × 336

Large 691 × 336

Page 41: 03.Controls in Windows Phone

Introduction to Localization

Page 42: 03.Controls in Windows Phone

• Windows Phone 8 supports 50 display languages (shipped with the phone depending on market and country/region) and selectable by the user on the language+region section of the Settings page

• Windows Phone 7.1 supported only 24

• Windows Phone 8 allows you to build apps that read from right to left

Language Support

http://msdn.microsoft.com/en-

us/library/windowsphone/develop/ff637520(v=vs.105).aspx

Page 43: 03.Controls in Windows Phone

• Every new project you create in Visual Studio 2012 has a class included called LocalizedStrings

• Simply provides programmatic access to resources• An instance of this is create in App.xaml in the Application Resources with the key

LocalizedStrings

• Every new project also includes a resources file: Resources\AppResources.resx

• Some strings already defined in here

• Create all your string literals in here to support localization

• All new projects also included commented-out code in MainPage.xaml.cs to setup a localized Application Bar

New Project Templates Have Localization Support Built In

8/16/2014

Page 44: 03.Controls in Windows Phone

• Databind the Text property of your TextBlock and other controls to the StaticResource with a key of LocalizedStrings

• That is an instance of the LocalizedStrings class

• It provides access to string resources

Accessing String Resources from XAML

8/16/2014 44

Page 45: 03.Controls in Windows Phone

• Double-click project properties to open the Properties editor

• On the Application tab• Check each of the

languages your app will support

• Save the Project Properties• Visual Studio creates new

AppResources files for each selected language/culture

Add Support for Additional Languages

8/16/2014 45

Page 46: 03.Controls in Windows Phone

• Visual Studio adds a resource file for each additional language that the app will support. Each resource file is named using the correct culture/language name, as described in Culture and language support for Windows Phone in the documentation

• For example: • For the culture Spanish (Spain), file is AppResources.es-ES.resx.

• For the culture German (Germany), file is AppResources.de-DE.resx.

• Supply appropriate translations in each resource file

Translate the Additional Languages Resource Files

8/16/2014 46

Page 47: 03.Controls in Windows Phone

• Double-click WMAppManifest.xml to open the manifest editor• On the Packaging tab

• Set the Default Languageto the language of your

default resources• This identifies the language of the

strings in the default resources file. For example, if the strings in the default resources file are English (United Kingdom) language strings, you would select English (United Kingdom)

as the Neutral Language for the project

Define the Default Language

8/16/2014 47

Page 48: 03.Controls in Windows Phone

Demo AnimalSound

Page 49: 03.Controls in Windows Phone

The Windows Phone Toolkit

Page 50: 03.Controls in Windows Phone

WPToolkit

• A product of the Microsoft Windows Phone team

• Formerly known as the ‘Silverlight Toolkit’

• The Windows Phone Toolkit adds new functionality ‘out of band’ from the official product control set

• Includes full open source code, samples, documentation, and design-time support for controls for Windows Phone

• Refresh every three months or so• Bug fixes• New controls

50

Page 51: 03.Controls in Windows Phone

How to Get the Toolkit

• http://phone.codeplex.com

• Get source code, including the sample application

• No MSI! – Install binaries from NuGet only

Page 52: 03.Controls in Windows Phone

NuGet

• Package management system for .NET

• Simplifies incorporating third-party libraries

• Developer focused

• Free, open source

• NuGet client is included in Visual Studio 2012 – including Express Editions!

• Use NuGet to add libraries such asthe Windows Phone Toolkit to projects

Page 53: 03.Controls in Windows Phone

Controls in the Windows Phone Toolkit

Page 54: 03.Controls in Windows Phone

ContextMenu

Page 55: 03.Controls in Windows Phone

DatePicker and TimePicker

55

Page 56: 03.Controls in Windows Phone

ToggleSwitch

56

Page 57: 03.Controls in Windows Phone

WrapPanel

57

Page 58: 03.Controls in Windows Phone

ListPicker

• WP7 ComboBox

• Dropdown list for small number of items

• Full screen selector for longer lists

Page 59: 03.Controls in Windows Phone

…And Many More

• Custom MessageBox

• Rating control

• AutoCompleteBox

• ExpanderView

• HubTile

• …more…

• Download the source from http://Silverlight.codeplex.com, build the sample application and deploy to emulator or device

8/16/2014 59

Page 60: 03.Controls in Windows Phone

Page Transitions and TiltEffect

Page 61: 03.Controls in Windows Phone

Page Transitions

• Easy way to add page transitions to your app similar to those in the built-in apps

• Different transitions are included• Roll, Swivel, Rotate, Slide and Turnstile

• Start by using the TransitionFrame control from the Windows Phone Toolkit instead of the default PhoneApplicationFrame

• Set in InitializePhoneApplication() method in App.Xaml.cs:

Page 62: 03.Controls in Windows Phone

Enabling Transitions on a Page

• Declare namespace for Windows Phone Toolkit assembly

• Under <phone:PhoneApplicationPage> root element, add transition you want

Page 63: 03.Controls in Windows Phone

TiltEffect

• Add additional visual feedback for control interaction

• Instead of simple states such as Pressed or Unpressed, controls with TiltEffect enabled provide motion during manipulation

• For example, Button has a subtle 3D effect and appears to move into the page when pressed and bounce back again when released

• Easy to enable TiltEffect for all controls on a page

• Also can apply to individual controls

Page 64: 03.Controls in Windows Phone

DemoPhoneToolkitSample

64

Page 65: 03.Controls in Windows Phone

Review• Navigation to pages is performed on the basis of a URI (Uniform Resource Indicator) values

• The back button normally navigates back to the previous page, but this can be overridden

• The URI can contain a query string to pass contextual string data

• Support for Localization is incorporated into the project templates

• Supporting different screen resolutions is simplified because they are scaled to a near-identical effective resolution.

• Supply images scaled for WXGA and they will be scaled down automatically for lower screen resolutions.

• The Windows Phone Toolkit is an out of band method for Microsoft to release additional tools and libraries outside of Visual Studio release cycles

• http://silverlight.codeplex.com

• The toolkit includes Page transitions and TiltEffect with which you can add common animations to your applications