ppt - SilverlightShow

advertisement
10 Things a Silverlight Developer Should
Know When Building A Metro Application
SILVERLIGHTSHOW.NET WEBINARS SERIES
Michael Crump, July 3rd, 2012
www.michaelcrump.net @mbcrump
You can win!
Complete the post-webinar survey! Three of you will get a
free ebook of choice from SilverlightShow Ebook Shelf!
Tweet this webinar using #webinarsilverlightshow tag.
Two of you will get an ebook from Packt Publishing,
choosing between:
• Microsoft Silverlight 5 Data and Services
Cookbook OR
• MVVM Survival Guide for Enterprise
Architectures in Silverlight and WPF
Introduction
Michael Crump
Microsoft MVP, MCPD
Telerik (www.telerik.com)
Web: http://michaelcrump.net
Twitter: @mbcrump
Patience my friend – Install Windows 8 you will. Wise would be to install inside a VM.
Intro
10
Things
Q/A
So, you’re a Silverlight Developer
Now What?
#1 : Starting with the Fundamentals
Silverlight
• Hosted inside a web browser via plugin.
• Silverlight Applications can run in
Windows 8 in Desktop Mode only.
• You can use C#/VB and XAML to
develop applications.
• XNA – (partial) Available in SL5.
• Uses .NET Framework 2.0-4.5
• Can use any version of Visual Studio
to develop for it.
• Built primary for mouse/keyboard
input. (Chrome)
Metro
• Runs on top of WinRT inside Windows
8.
• Metro Applications can only run in
Windows 8.
• You can use C#/VB/C++/XAML or
HTML/JS
• XNA not available in WinRT, but can
use DirectX.
• Uses .NET Framework 4.5
• Can only develop for it using VS11
and Windows 8.
• Built primary for touch input. (No
Chrome)
#2 : Application Lifecycle
Silverlight
User
Request
Webpage
HTML
Page
<object>
tag loads
plug-in
Plug-in
download
s XAP file
and reads
manifest
Create
instance
of
Applicatio
n Class
Fire
Applicatio
n Start up
Event
Complete
d page
rendering.
Metro
User
Launches
App
Splash
screen
suspending
Running
App
resuming
Code gets to run
#3 : XML Namespaces
You only declare the namespace (never the assembly) and you
should use "using" instead of "clr-namespace"
Silverlight
<UserControl x:Class="DiggSample.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Digg="clr-namespace:DiggSample">
Metro
<UserControl x:Class="DiggSample.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Digg="using:DiggSample">
Silverlight
xmlns:ad="clrnamespace:Microsoft.Advertising.Mobile.UI;assembly=Microsoft.
Advertising.Mobile.UI"
Metro
xmlns:ad="using:Microsoft.Advertising.WinRT.UI"
#3 : Code Namespaces (cont…)
The majority of changes occur in the UI related classes.
System.Windows -> Windows.UI.Xaml
Code Namespaces cont.
Silverlight
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
Metro
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Documents;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Media.Imaging;
using Windows.UI.Xaml.Navigation;
using Windows.UI.Xaml.Shapes;
Silverlight 5 vs. WinRT comparison by
namespace
http://bit.ly/I4eWTt
#4 : Making WebRequest
• WebClient has been removed from WinRT. Instead, you can
now use HttpClient.
• WebRequest makes use of async, await and Tasks<T>.
• Callbacks such as IAsyncResult will need to be re-written.
Asynchronous Programming
async avoids the bottleneck of your application being executed
line by line.
o Your program can continue to execute.
o The "async" keyword enables the "await" keyword in that
method.
await operator is applied to a task to suspend execution of the
method until the task is complete.
Tasks<T> represents an asynchronous operation that can return
a value.
Silverlight
void SearchBtn_Click(object sender, RoutedEventArgs e)
{
string topic = txtSearchTopic.Text;
string diggUrl =
String.Format("http://services.digg.com/stories/topic/{0}?count=20&
appkey=http%3A%2F%2Fscottgu.com", topic);
// Initiate Async Network call to Digg
WebClient diggService = new WebClient();
diggService.DownloadStringCompleted += new
DownloadStringCompletedEventHandler(DiggService_DownloadStoriesComp
leted);
diggService.DownloadStringAsync(new Uri(diggUrl));
}
void DiggService_DownloadStoriesCompleted(object sender,
DownloadStringCompletedEventArgs e)
{
if (e.Error == null)
{
// Call another Method
DisplayStories(e.Result);
}
}
Metro
public async void SearchBtn_Click(object sender, RoutedEventArgs
e)
{
// Retrieve Topic to Search for from WaterMarkTextBox
string topic = txtSearchTopic.Text;
// Construct Digg REST URL
string diggUrl =
String.Format("http://services.digg.com/search/stories?query={0}&ap
pkey=http://www.scottgu.com", topic);
// Initiate Async Network call to Digg
var client = new HttpClient();
var response = new HttpResponseMessage();
//Get response
response = await client.GetAsync(new Uri(diggUrl));
Task<string> responseString =
response.Content.ReadAsStringAsync();
string result = await responseString;
DisplayStories(result);
}
Demo
WebClient & HttpClient
#5 : Storage
Files and Isolated Storage
File I/O
Silverlight
IsolatedStorage – Can do anything.
Read/Write a file to Documents Folder
via Open/Save Dialogs or by using
Elevated Trust (SL4)
Read/Write a file to C:\Temp possible via
FilePickers or Full Trust (SL5) will not
require user intervention.
Metro
IsolatedStorage – Can do anything.
Read/Write a file to Documents Folder
via FilePickers only if set in Application
Manifest.
Read/Write a file to C:\Temp possible via
FilePickers only!
Demo
Files
#6 : Navigation
Rethink URI…
Silverlight
<navigation:Frame x:Name="ContentFrame" Style="{StaticResource
ContentFrameStyle}"
Source="/Home" Navigated="ContentFrame_Navigated"
NavigationFailed="ContentFrame_NavigationFailed">
<navigation:Frame.UriMapper>
<uriMapper:UriMapper>
<uriMapper:UriMapping Uri="" MappedUri="/Views/Home.xaml"/>
<uriMapper:UriMapping Uri="/{pageName}"
MappedUri="/Views/{pageName}.xaml"/>
</uriMapper:UriMapper>
</navigation:Frame.UriMapper>
</navigation:Frame>
this.NavigationService.Navigate(new Uri("/Page1.xaml", UriKind.Relative));
Metro
void Header_Click(object sender, RoutedEventArgs e)
{
// Determine what group the Button instance represents
var group = (sender as FrameworkElement).DataContext;
// Navigate to the appropriate destination page, configuring the
new page
// by passing required information as a navigation parameter
this.Frame.Navigate(typeof(GroupDetailPage), group);
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
var group = (SampleDataGroup)e.Parameter;
this.DefaultViewModel["Group"] = group;
this.DefaultViewModel["Items"] = group.Items;
}
#7 : Controls
Some added and some missing from Metro.
Silverlight Controls - MIA
Calendar, ChildWindow, DataGrid, DataPager, DatePicker,
DescriptionViewer, MultiScaleImage, OpenFileDialog, RichTextBox,
SaveFileDialog, TabControl, TabItem, TreeView, Validation,
WebBrowser
GridView
Progress Ring
Web View
ListView
Semantic Zoom
FlipView
New XAML Controls
• ListView – Displays a collection as a stack of items. (Think
Snapped Application)
• GridView – Grid-Based Layouts and grouping of items.
• Semantic zoom (Old Name JumpViewer) – Zoom in or out on
a collection.
• FlipView – Items Control that displays one item at a time.
• Media Player – Now with built-in playback buttons.
• Progress Ring – Simple Progress Indicator with a circular
motion.
• Application Bar, CarouselPanel, RichTextBlock and WrapGrid.
Demo
Controls
#8 : Animations
Animations are a key component of the Metro Style
Personality.
Silverlight Animations
Animation Easing allows you to apply built in animation
functions to your Silverlight controls. The result is a variety of
animation effects that make your controls move in a more
realistic way.
Metro Animations
Independent animation - is an animation that runs
independently from thread running the core UI logic.
Dependent animations run on the UI Thread. Must turn on by
using AllowDependentAnimation to True.
Animation Library – FREE! http://bit.ly/IO3oVR
• Theme Transitions – animate loading, unloading or changing
location on the screen.
• Theme Animations – build to run on user interaction and you
must trigger them.
You can create custom animations as well.
Demo
Animation – created by Colin Eberhardt
http://www.codeproject.com/Articles/269351/WinRTTransitions-Creating-Fast-and-Fluid-Metro-UI
#9 : Freebies
Searching and Sharing…
Charms
Charms are a way of preparing Windows 8 for
an ultimate integration with natural user
interface (NUI) technology, which allows you
to have everything at your fingertips without
going through a whole lot of effort.
Contracts
• Metro style apps use contracts and extensions to declare the
interactions that they support with other apps and with
Windows.
• Search contracts opens up your application to intregrate with
Windows search
• Share contract allows your app to share content with other
apps
• Many others exist and can be found at http://bit.ly/K7hd2B
#10 : Monetizing
Because who doesn’t want to make money.
Windows Store
Sell your application in the
Windows Store.
• Designed for Discovery.
• Reach – Global (231
markets)
• Enterprise
• Flexible business model
(free, paid or trial)
• Microsoft AD SDK out
now.
Windows Store (cont…)
• Registration Fee is $49
USD ($99 for Companies)
• Share up to 80% of the
revenue generated from
app sales.
Recap
1. Starting with the Fundamentals
2. Application Lifecycle
3. XML/Code Namespaces
4. Making WebRequest - Async
5. Storage – Files and Isolated Storage
6. Navigation – No more URI
7. Controls – New ones added
8. Animations – Baked into WinRT
9. Freebies – Charms (Searching and Sharing)
10. Monetizing – With the Microsoft Store
The Bits
Main starting point: http://dev.windows.com/
– Metro style app reference and APIs
– Sample Apps, Windows Store, Forums
– Windows 8 OS – Release Preview Stage
• VS2012 RC : DP > BETA > RC > RTM
• .NET Framework 4.5
See my article in Visual Studio Magazine where I ported a SL2
app to Metro. http://bit.ly/x2YEI4
Q&A
Email: michael@michaelcrump.net
Web:
http://michaelcrump.net
Twitter: @mbcrump
Telerik is creating Windows 8 Controls and more info can be
found at:
http://www.telerik.com/products/windows-metro.aspx
Download