SlideShare a Scribd company logo
1 of 64
Download to read offline
F O C U S           Q U A L I T Y           E X P E R I E N C E




                Desarrollo Windows 8

                                                        Xavier Saladié
                                              xavisf@expert.netmind.es
                                                  Barcelona, Noviembre 2012




Desarrollo Windows 8
Contenidos
   Plataforma Aplicaciones Windows 8
   Tools
   UI Controls
   Appbar
   FlipView
   ListView, Grouping y Semantic zoom
   Contratos
   Notificaciones
   Puntos claves para publicar en el Store
Tu aplicación

                                                     Llamadas Directas
Process.exe (C#,VB.Net, C++)
              o                WinRT APIs
                                                                             Core OS



  WWAHost.exe (HTML/JS)

                                            Llamadas Delegadas    Broker

  Contenedor+ Código Firmado y Verificado


                                                              AppXManifest
La app toma 5s para         La App no es
              entrar en suspensión      notificada antes de
                                            terminarse

Usuario
 Lanza
  App

            Las apps son informadas
           cuando se las ha reanudado


Pantalla
 Splash
• App usan sus datos y los almacena localmente


                        Local
                       Storage


                                     La información se
                                     sincroniza desde la
                                     cuenta Microsoft del
                                     usuario
The development tools are FREE!
If you use a higher SKU, it just works!




                                      Files / Assets




                                    AppXManifest.xml

                                       BlockMap

                                        Signature
                                       Zip Central
                                        Directory

                                      .appx package
Visual Studio 2012
Spell Checking    Clear Button




                                                                        Reveal Button




<!– Paso 1: declarar el control -->
<div id=“list” data-win-control="WinJS.UI.ListView" data-win-
options="{ selectionMode: 'none' }"></div>

/* Paso 2: Llamar a WinJS.UI.processAll() */


/* Paso 3: Usar el control */
document.getElementById(‘list’).winControl.addEventListener
(‘selectionchanged’, onSelChanged );
<Page
    x:Class="CSharpWinRT.BlankPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:CSharpWinRT"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <Button Content="La caja de Pandora" Click="Button_Click_1" Height="81"
Margin="0,365,0,322" Width="248" HorizontalAlignment="Center" FontWeight="Normal" FontSize="22" />
        <Image x:Name="selectedImage" Width="600" HorizontalAlignment="Center"
VerticalAlignment="Center" Stretch="Uniform" Margin="383,384,383,383" > </Image>
    </Grid>
</Page>
Se utiliza para mostrar las acciones de una ventana.
Se mantiene oculta.
Puede cambiar en función de la pantalla.
Se activa con el botón derecho




                           Iconos: http://msdn.microsoft.com/en-us/library/windows/apps/hh770557.aspx
<Page.BottomAppBar>
    <AppBar x:Name="BottomAppBar1" Padding="10,0,10,0" AutomationProperties.Name="Bottom App Bar">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="50*"/>
                <ColumnDefinition Width="50*"/>
            </Grid.ColumnDefinitions>
            <StackPanel x:Name="LeftPanel" Orientation="Horizontal" Grid.Column="0" HorizontalAlignment="Left">
                <Button x:Name="Edit" Style="{StaticResource EditAppBarButtonStyle}" Tag="Edit"/>
                <Button x:Name="Save" Style="{StaticResource SaveAppBarButtonStyle}" Tag="Save"/>
                <Button x:Name="Delete" Style="{StaticResource DeleteAppBarButtonStyle}" Tag="Delete"/>
            </StackPanel>
            <StackPanel x:Name="RightPanel" Orientation="Horizontal" Grid.Column="1" HorizontalAlignment="Right">
                <Button x:Name="Refresh" Style="{StaticResource RefreshAppBarButtonStyle}" Tag="Refresh"/>
                <Button x:Name="Previous" Style="{StaticResource PreviousAppBarButtonStyle}" Tag="Previous"/>
                <Button x:Name="Next" Style="{StaticResource NextAppBarButtonStyle}" Tag="Next"/>
                <Button x:Name="Help" Style="{StaticResource HelpAppBarButtonStyle}" Tag="Help"/>
            </StackPanel>
        </Grid>
    </AppBar>
</Page.BottomAppBar>
public MyPage()
{
    this.InitializeComponent();
    Back.Click += Back_Click;
}


private void Back_Click(object sender, RoutedEventArgs e)
{
    if (this.Frame.CanGoBack)
    {
       Frame.GoBack();
    }

}
Muestra una colección de elementos.
Genera un avance y retroceso por defecto.
Se pueden utilizar plantillas para el contenido.
<FlipView x:Name="flipView1" Width="480" Height="270" BorderBrush="Black" BorderThickness="1">
      <FlipView.ItemTemplate>
           <DataTemplate>
                 <Grid>
                     <Image Width="480" Height="270" Source="{Binding Image}" Stretch="UniformToFill"/>
                        <Border Background="#A5000000" Height="80" VerticalAlignment="Bottom">
                        <TextBlock Text="{Binding Name}" FontFamily="Segoe UI" FontSize="26.667"
                                  Foreground="#CCFFFFFF" Padding="15,20"/>
                        </Border>
                  </Grid>
            </DataTemplate>
       </FlipView.ItemTemplate>
 </FlipView>
Permite mostrar listados de información.
Hace uso de plantillas para configurar el contenido.
<ListView x:Name="ItemListView" Width="Auto" Height="Auto" HorizontalAlignment="Left"
               Background="{StaticResource ApplicationPageBackgroundThemeBrush}"
               ItemTemplate="{StaticResource StoreFrontTileTemplate}"
               ItemContainerStyle="{StaticResource StoreFrontLVTileStyle}"
               BorderBrush="LightGray" BorderThickness="1"
               VerticalAlignment="Stretch"
               ScrollViewer.VerticalScrollBarVisibility="Auto"
               ScrollViewer.HorizontalScrollBarVisibility="Auto" SelectionMode="None"/>


 <!– List View Resources -->
            <DataTemplate x:Key="StoreFrontTileTemplate">
                <Grid HorizontalAlignment="Left" Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
                    <StackPanel Orientation="Horizontal" Margin="10,10,0,0">
                        <Image Source="{Binding Image}" Height="60" Width="60" VerticalAlignment="Center" Margin="0,0,10,0"/>
                        <StackPanel Margin="0,0,0,0" Orientation="Vertical">
                             <TextBlock TextWrapping="Wrap" Foreground="{StaticResource ApplicationForegroundThemeBrush}" Style="{StaticResource ItemTitleStyle}"
                                Width="200“ VerticalAlignment="Center" Text="{Binding Title}" HorizontalAlignment="Left" FontFamily="Segoe UI" />
                             <TextBlock TextWrapping="Wrap" Foreground="{StaticResource ApplicationForegroundThemeBrush}" Style="{StaticResource ItemSubtitleStyle}“
                                   Width="200" MaxHeight="20" VerticalAlignment="Center" Text="{Binding Category}" HorizontalAlignment="Left"/>
                        </StackPanel>
                    </StackPanel>
                </Grid>
            </DataTemplate>

            <Style x:Key="StoreFrontLVTileStyle" TargetType="ListViewItem">
                <Setter Property="FontFamily" Value="Segoe UI" />
                <Setter Property="Height" Value="80" />
                <Setter Property="Width" Value="292" />
                <Setter Property="Padding" Value="0" />
                <Setter Property="Margin" Value="0,0,8,8" />
                <Setter Property="HorizontalContentAlignment" Value="Left" />
                <Setter Property="VerticalContentAlignment" Value="Top" />
                <Setter Property="BorderThickness" Value="0"/>
                <Setter Property="TabNavigation" Value="Local" />
            </Style>
Nos permite agrupar la información.
La forma de crear grupos es personalizada.
Se utiliza el control ListView como base.
<Page.Resources>
        <CollectionViewSource x:Name="cvs1" IsSourceGrouped="true" />
  </Page.Resources>
<GridView x:Name="ItemsByCategory" VerticalAlignment="Bottom" ItemsSource="{Binding Source={StaticResource cvs1}}" BorderBrush="{StaticResource ApplicationForegroundThemeBrush}"
BorderThickness="1">
            <GridView.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </GridView.ItemsPanel>
            <GridView.ItemTemplate>
                <DataTemplate>
                    <Grid HorizontalAlignment="Left" Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
                        <StackPanel Orientation="Horizontal" Margin="10,10,0,0">
                            <Image Source="{Binding Image}" Height="60" Width="60" VerticalAlignment="Center" Margin="0,0,10,0"/>
                            <StackPanel Margin="0,0,0,0" Orientation="Vertical">
                                <TextBlock TextWrapping="Wrap" Width="200" VerticalAlignment="Center" Text="{Binding Title}" HorizontalAlignment="Left" FontFamily="Segoe UI" />
                            </StackPanel>
                        </StackPanel>
                    </Grid>
                </DataTemplate>
            </GridView.ItemTemplate>
            <GridView.GroupStyle>
                <GroupStyle>
                    <GroupStyle.HeaderTemplate>
                        <DataTemplate>
                            <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}" Margin="0">
                                <TextBlock Text='{Binding Key}' Foreground="Gray" FontSize="25" Margin="5" />
                            </Grid>
                        </DataTemplate>
                    </GroupStyle.HeaderTemplate>
                    <GroupStyle.Panel>
                        <ItemsPanelTemplate>
                            <VariableSizedWrapGrid Orientation="Vertical" Height="400" />
                        </ItemsPanelTemplate>
                    </GroupStyle.Panel>
                </GroupStyle>
            </GridView.GroupStyle>
        </GridView>
internal List<GroupInfoList<object>> GetGroupsByCategory()
{     List<GroupInfoList<object>> groups = new List<GroupInfoList<object>>();
      var query = from item in Collection orderby ((Item)item).Category
                group item by ((Item)item).Category into g
                select new { GroupName = g.Key, Items = g };
      foreach (var g in query)
      { GroupInfoList<object> info = new GroupInfoList<object>();
         info.Key = g.GroupName;
         foreach (var item in g.Items)
         { info.Add(item); }
         groups.Add(info); }
      return groups; }
public class GroupInfoList<T> : List<object>
{
    public object Key { get; set; }
    public new IEnumerator<object> GetEnumerator()
    { return (System.Collections.Generic.IEnumerator<object>)base.GetEnumerator();} }
 List<GroupInfoList<object>> dataCategory = _storeData.GetGroupsByCategory();
 cvs1.Source = dataCategory;
<Grid x:Name="ContentPanel" VerticalAlignment="Top" HorizontalAlignment="Left">
       <SemanticZoom x:Name="semanticZoom" VerticalAlignment="Bottom">
           <SemanticZoom.ZoomedOutView>
               <GridView ScrollViewer.IsHorizontalScrollChainingEnabled="False">
                   <GridView.ItemTemplate>
                       <DataTemplate>
                           <TextBlock
                               Text="{Binding Group.Key}"
                               FontFamily="Segoe UI Light"
                               FontSize="24"/>
                       </DataTemplate>
                   </GridView.ItemTemplate>
                   <GridView.ItemsPanel>
                       <ItemsPanelTemplate>
                           <WrapGrid ItemWidth="75" ItemHeight="75" MaximumRowsOrColumns="1“ VerticalChildrenAlignment="Center" />
                       </ItemsPanelTemplate>
                   </GridView.ItemsPanel>
                   <GridView.ItemContainerStyle>
                       <Style TargetType="GridViewItem">
                           <Setter Property="Margin" Value="4" />
                           <Setter Property="Padding" Value="10" />
                           <Setter Property="BorderBrush" Value="Gray" />
                           <Setter Property="BorderThickness" Value="1" />
                           <Setter Property="HorizontalContentAlignment" Value="Center" />
                           <Setter Property="VerticalContentAlignment" Value="Center" />
                       </Style>
                   </GridView.ItemContainerStyle>
               </GridView>
           </SemanticZoom.ZoomedOutView>                               List<GroupInfoList<object>> dataLetter = _storeData.GetGroupsByLetter();
                                                                           cvs2.Source = dataLetter;

                                                                          (semanticZoom.ZoomedOutView as ListViewBase).ItemsSource = cvs2.View.CollectionGroups;
<SemanticZoom.ZoomedInView>
<GridView ItemsSource="{Binding Source={StaticResource cvs2}}" IsSwipeEnabled="True" ScrollViewer.IsHorizontalScrollChainingEnabled="False">
             <GridView.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal" Margin="10,10,0,0" HorizontalAlignment="Left"
                                   Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
                                <Image Source="{Binding Image}" Height="60" Width="60" VerticalAlignment="Center" Margin="0,0,10,0"/>
                                <TextBlock TextWrapping="Wrap" Foreground="{StaticResource ApplicationForegroundThemeBrush}" Width="200“
                                     VerticalAlignment="Center“ Text="{Binding Title}" HorizontalAlignment="Left" FontFamily="Segoe UI" />
                            </StackPanel>
                        </DataTemplate>
                    </GridView.ItemTemplate>
                    <GridView.GroupStyle>
                        <GroupStyle>
                            <GroupStyle.HeaderTemplate>
                                <DataTemplate>
                                    <TextBlock Text='{Binding Key}' Foreground="{StaticResource ApplicationForegroundThemeBrush}" Margin="5" FontSize="18“
                                      FontFamily="Segoe UI Light" />
                                </DataTemplate>
                            </GroupStyle.HeaderTemplate>
                            <GroupStyle.ContainerStyle>
                                <Style TargetType="GroupItem">
                                    <Setter Property="Template">

                                          ….
//override in app the handler to OnWindowCreated
protected override void OnWindowCreated(WindowCreatedEventArgs args)
{ // Register QuerySubmitted handler for the window at window creation time
  SearchPane.GetForCurrentView().QuerySubmitted +=
    new TypedEventHandler<SearchPane, SearchPaneQuerySubmittedEventArgs>(OnQuerySubmitted);}

private void OnQuerySubmitted(SearchPane sender, SearchPaneQuerySubmittedEventArgs args)
{ // Process the query
  if (MainPage.Current != null)
     { MainPage.Current.ProcessQueryText(args.QueryText);} }
protected override void OnNavigatedTo(NavigationEventArgs e)
 {   // Register the current page as a share source.
     this.dataTransferManager = DataTransferManager.GetForCurrentView();
     this.dataTransferManager.DataRequested += new TypedEventHandler<DataTransferManager,
                                          DataRequestedEventArgs>(this.OnDataRequested); }
 protected override void OnNavigatedFrom(NavigationEventArgs e)
 {     // Unregister the current page as a share source.
     this.dataTransferManager.DataRequested -= new TypedEventHandler<DataTransferManager,
                                          DataRequestedEventArgs>(this.OnDataRequested); }
// When share is invoked the event handler will be called to populate the datapackage.
 private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs e)
 {   bool succeeded = false;
     string dataPackageText = TextToShare.Text;
     if (!String.IsNullOrEmpty(dataPackageText))
     {    DataPackage requestData = e.request.Data;
          requestData.Properties.Title = TitleInputBox.Text;
          requestData.Properties.Description = DescriptionInputBox.Text;
          requestData.SetText(dataPackageText);
          succeeded = true; }
       else
       { e.request.FailWithDisplayText("Enter the text you would like to share and try again."); }
           return succeeded; }
Permite recibir información de otras apps.
Puede permitir distintos formatos.
Se activa al seleccionar la app dentro de Share.
//On App we override the event for Share Targeting Activated and navigate to the Page receiving data
 protected override void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
 {   var rootFrame = new Frame();
     rootFrame.Navigate(typeof(MainPage), args.ShareOperation);
     Window.Current.Content = rootFrame;
     Window.Current.Activate();   }


//On NavigateTo event of the page receiving data, we just do it asynchronously
 protected override async void OnNavigatedTo(NavigationEventArgs e)
 {   // It is recommended to only retrieve the ShareOperation object in the activation handler, return as
     // quickly as possible, and retrieve all data from the share target asynchronously.
     this.shareOperation = (ShareOperation)e.Parameter;
     await Task.Factory.StartNew(async () =>
     {   // Retrieve the data package properties.
         this.sharedDataTitle = this.shareOperation.Data.Properties.Title;
         this.sharedDataDescription = this.shareOperation.Data.Properties.Description;
         this.sharedThumbnailStreamRef = this.shareOperation.Data.Properties.Thumbnail;
         this.shareQuickLinkId = this.shareOperation.QuickLinkId;
         // Retrieve the data package content.
         if (this.shareOperation.Data.Contains(StandardDataFormats.Uri))
         {   // The GetUriAsync() API will throw if there was an error retrieving data.
             try { this.sharedUri = await this.shareOperation.Data.GetUriAsync(); }
             catch (Exception ex)
             { …     }   }
Square (1x1)   Wide (2x1)
IWideTileNotificationContent tileContent = null;
ITileWideImageAndText01 wideContent = TileContentFactory.CreateTileWideImageAndText01();
wideContent.RequireSquareContent = false;
wideContent.TextCaptionWrap.Text = "The image is in the appx package";
wideContent.Image.Src = "ms-appx:///images/redWide.png";
wideContent.Image.Alt = "Red image";
tileContent = wideContent;
// Users can resize tiles to square or wide.
// Apps can choose to include only square assets (meaning the app's tile can never be wide), or
// include both wide and square assets (the user can resize the tile to square or wide).
// Apps cannot include only wide assets. Apps that support being wide should include square tile
// notifications since users determine the size of the tile.
// create the square template and attach it to the wide template
ITileSquareText04 squareContent = TileContentFactory.CreateTileSquareText04();
squareContent.TextBodyWrap.Text = "Hello World! My very own tile notification";
tileContent.SquareContent = squareContent;
TileUpdateManager.CreateTileUpdaterForApplication().Update(tileContent.CreateNotification());




 http://msdn.microsoft.com/en-us/library/windows/apps/hh913756.aspx
 http://msdn.microsoft.com/en-us/library/windows/apps/xaml/Hh868255(v=win.10).aspx
http://msdn.microsoft.com/en-us/library/windows/apps/hh913756.aspx
http://msdn.microsoft.com/en-us/library/windows/apps/xaml/Hh868255(v=win.10).aspx




http://msdn.microsoft.com/en-us/library/windows/apps/hh913756.aspx
http://msdn.microsoft.com/en-us/library/windows/apps/xaml/Hh868255(v=win.10).aspx
http://msdn.microsoft.com/en-us/library/windows/apps/hh913756.aspx
http://msdn.microsoft.com/en-us/library/windows/apps/xaml/Hh868255(v=win.10).aspx




http://msdn.microsoft.com/en-us/library/windows/apps/hh913756.aspx
http://msdn.microsoft.com/en-us/library/windows/apps/xaml/Hh868255(v=win.10).aspx
http://msdn.microsoft.com/en-us/library/windows/apps/hh913756.aspx
http://msdn.microsoft.com/en-us/library/windows/apps/xaml/Hh868255(v=win.10).aspx
Permite añadir segundos accesos a una app.
El usuario siempre debe aprobar este segundo tile.
Es posible actualizar su contenido.
// Prepare package images for use as the Tile Logo and small Logo in our tile to be pinned
Uri logo = new Uri("ms-appx:///Assets/squareTile-sdk.png");
Uri smallLogo = new Uri("ms-appx:///Assets/smallTile-sdk.png");
// In this sample, we'll pass in the date and time the secondary tile was pinned.
public const string SecTileId = "SecondaryTileId"
string tArguments = SecTileId + " WasPinnedAt=" + DateTime.Now.ToLocalTime().ToString();
// Create a 1x1 Secondary tile
SecondaryTile secTile = new SecondaryTile(SecTileId, "Title text", "Name when searching",
                                            tArguments, TileOptions.ShowNameOnLogo, logo);
secTile.ForegroundText = ForegroundText.Dark;
secTile.SmallLogo = smallLogo;
// OK, the tile is created and we can now attempt to pin the tile.
bool isPinned = await SecTile.RequestCreateForSelectionAsync(
       MainPage.GetElementRect((FrameworkElement)sender),Windows.UI.Popups.Placement.Below);




      // Typical OnLaunched override Method of App.xaml.cs

      async protected override void OnLaunched(LaunchActivatedEventArgs args)
      {   if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
          {    // Do an asynchronous restore
               await RestoreData()            }
          if (Window.Current.Content == null)
          {    var rootFrame = new Frame();
               rootFrame.Navigate(typeof(MainPage));
               ((MainPage)rootFrame.Content).LaunchArgs = args;
               Window.Current.Content = rootFrame; }
          else
          {    if (args.Arguments != “”)
               {     //Inspect content of args and navigate where is needed } }
          Window.Current.Activate();    }
IToastNotificationContent toastContent = null;
IToastImageAndText03 templateContent = ToastContentFactory.CreateToastImageAndText03();
templateContent.TextHeadingWrap.Text = "Heading text that wraps";
templateContent.TextBody.Text = "Body text";
templateContent.Image.Src = "images/toastImageAndText.png";
templateContent.Image.Alt = "Placeholder image";
toastContent = templateContent;

// Set the launch activation context parameter on the toast.
toastContent.Launch = "Context123";
// Create a toast from content
 ToastNotification toast = toastContent.CreateNotification();
// create a ToastNotifier object to show the toast
ToastNotificationManager.CreateToastNotifier().Show(toast);
<UserControl
// In app.OnLaunched and in app.OnSearchActivated we register event for managing settings
      x:Class="ContosoCookbook.PreferencesUserControl"
// Register handler for CommandsRequested events from the settings pane
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 SettingsPane.GetForCurrentView().CommandsRequested += OnCommandsRequested;
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
void OnCommandsRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args)
 {      // Add an About command
      xmlns:local="using:ContosoCookbook"
     var about = new SettingsCommand("about", "About", (handler) =>
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
     {    var settings = new SettingsFlyout();
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
          settings.Content = new AboutUserControl();
      mc:Ignorable="d"
          settings.HeaderBrush = new SolidColorBrush(_background);
      d:DesignHeight="300" = new SolidColorBrush(_background);
          settings.Background
      d:DesignWidth="400"> = "About";
          settings.HeaderText
      <Grid>
          settings.IsOpen = true;      });
       args.Request.ApplicationCommands.Add(about);
           <ToggleSwitch x:Name="Remember" Header="Remember where I was" Toggled="OnToggled" />
      </Grid> Preferences command
       // Add a
       var preferences = new SettingsCommand("preferences", "Preferences", (handler) =>
 </UserControl>
       { var settings = new SettingsFlyout();
          settings.Content = new PreferencesUserControl();
          settings.HeaderBrush = new SolidColorBrush(_background);
          settings.Background = new SolidColorBrush(_background);
          settings.HeaderText = "Preferences";
          settings.IsOpen = true; });
        args.Request.ApplicationCommands.Add(preferences); }
private void Button_Click(object sender, RoutedEventArgs e)
{
    Flyout flyOut = new Flyout();
    flyOut.PlacementTarget = sender as UIElement;
    flyOut.Placement = PlacementMode.Top;
    flyOut.Content = new FlyoutUserControl();
    flyOut.IsOpen = true;
}
// Create the message dialog and set its content and title
var msgDlg = new MessageDialog(“Updates found. Would you like to install?", "Updates");
// Add commands and set their callbacks
msgDlg.Commands.Add(new UICommand("Don't install", (command) =>
{ rootPage.NotifyUser("'Don't install' command has been selected.",
               NotifyType.StatusMessage); }));
 msgDlg.Commands.Add(new UICommand("Install updates", (command) =>
{ rootPage.NotifyUser("'Install updates' command has been selected.",
               NotifyType.StatusMessage); }));
// Set the command that will be invoked by default
msgDlg.DefaultCommandIndex = 1;
// Show the message dialog
await msgDlg .ShowAsync();
Escenario          Deberías….




using Windows.Networking.Connectivity;
...

public static bool isConnected()
{   var p=NetworkInformation.GetInternetConnectionProfile();
    if (p!=null) {
        if (p.GetNetworkConnectivityLevel()==NetworkConnectivityLevel.InternetAccess)
            { return true }
        else
            { return false; } }
    else { return false; } }
Anuncia con Microsoft Advertising o tu ad vendor
favorito




                                                   121
Y para terminar…




Foros en español
http://social.msdn.microsoft.com/Forums/es-ES/w8metroes/


Foros en inglés
http://social.msdn.microsoft.com/Forums/en-US/category/windowsapps


Alias de Soporte Desarrollo Windows 8
sopw8@microsoft.com
Introducción al desarrollo de aplicaciones Metro para Windows 8
http://blogs.msdn.com/b/esmsdn/archive/2012/07/18/introducci-243-n-al-
desarrollo-de-aplicaciones-metro-para-windows-8.aspx


Cursos de Formación de Windows 8
http://blogs.msdn.com/b/esmsdn/archive/2012/09/04/cursos-de-formaci-243-n-
de-windows-8.aspx


Tips & Tricks de desarrollo para Windows 8
http://blogs.msdn.com/b/esmsdn/archive/2012/08/08/tips-amp-tricks-de-
desarrollo-para-windows-8.aspx




Windows 8 Metro style app samples
http://code.msdn.microsoft.com/windowsapps


Problemas comunes para pasar la certificación de Windows 8
http://blogs.msdn.com/b/esmsdn/archive/2012/07/31/problemas-comunes-
para-pasar-la-certificaci-243-n-de-windows-8.aspx


V3.0 Certification requirements
http://msdn.microsoft.com/en-us/library/windows/apps/jj128432.aspx
F O C U S    Q U A L I T Y            E X P E R I E N C E




             Preguntas y aclaraciones

            Muchas gracias por su atención
                                               Xavier Saladié
                                     xavisf@expert.netmind.es

More Related Content

What's hot

The rise and fall of a techno DJ, plus more new reviews and notable screenings
The rise and fall of a techno DJ, plus more new reviews and notable screeningsThe rise and fall of a techno DJ, plus more new reviews and notable screenings
The rise and fall of a techno DJ, plus more new reviews and notable screeningschicagonewsyesterday
 
Django Templates
Django TemplatesDjango Templates
Django TemplatesWilly Liu
 
Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011Chris Alfano
 
Validacion pag megacine peña
Validacion pag megacine peñaValidacion pag megacine peña
Validacion pag megacine peñaMegacine Peña
 
Dr. Strangelove or: How I learned to stop worrying and love HTML, CSS and Jav...
Dr. Strangelove or: How I learned to stop worrying and love HTML, CSS and Jav...Dr. Strangelove or: How I learned to stop worrying and love HTML, CSS and Jav...
Dr. Strangelove or: How I learned to stop worrying and love HTML, CSS and Jav...RobotDeathSquad
 
Ch9 .Best Practices for Class-Based Views
Ch9 .Best Practices  for  Class-Based ViewsCh9 .Best Practices  for  Class-Based Views
Ch9 .Best Practices for Class-Based ViewsWilly Liu
 
HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2James Pearce
 
Building sustainable RESTFul services
Building sustainable RESTFul servicesBuilding sustainable RESTFul services
Building sustainable RESTFul servicesOrtus Solutions, Corp
 
Building Cross Platform Mobile Web Apps
Building Cross Platform Mobile Web AppsBuilding Cross Platform Mobile Web Apps
Building Cross Platform Mobile Web AppsJames Pearce
 
A Snapshot of the Mobile HTML5 Revolution
A Snapshot of the Mobile HTML5 RevolutionA Snapshot of the Mobile HTML5 Revolution
A Snapshot of the Mobile HTML5 RevolutionJames Pearce
 
Session 2
Session 2Session 2
Session 2alfador
 
Unique features of windows 8
Unique features of windows 8Unique features of windows 8
Unique features of windows 8FITC
 
Desenvolvimento web com Ruby on Rails (extras)
Desenvolvimento web com Ruby on Rails (extras)Desenvolvimento web com Ruby on Rails (extras)
Desenvolvimento web com Ruby on Rails (extras)Joao Lucas Santana
 
YDN KR Tech Talk : Pipes 와 YQL 활용하기
YDN KR Tech Talk : Pipes 와 YQL 활용하기YDN KR Tech Talk : Pipes 와 YQL 활용하기
YDN KR Tech Talk : Pipes 와 YQL 활용하기Jinho Jung
 
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...tdc-globalcode
 

What's hot (20)

Polymer
PolymerPolymer
Polymer
 
The rise and fall of a techno DJ, plus more new reviews and notable screenings
The rise and fall of a techno DJ, plus more new reviews and notable screeningsThe rise and fall of a techno DJ, plus more new reviews and notable screenings
The rise and fall of a techno DJ, plus more new reviews and notable screenings
 
Django Templates
Django TemplatesDjango Templates
Django Templates
 
Django Bogotá. CBV
Django Bogotá. CBVDjango Bogotá. CBV
Django Bogotá. CBV
 
Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011
 
Validacion pag megacine peña
Validacion pag megacine peñaValidacion pag megacine peña
Validacion pag megacine peña
 
Dr. Strangelove or: How I learned to stop worrying and love HTML, CSS and Jav...
Dr. Strangelove or: How I learned to stop worrying and love HTML, CSS and Jav...Dr. Strangelove or: How I learned to stop worrying and love HTML, CSS and Jav...
Dr. Strangelove or: How I learned to stop worrying and love HTML, CSS and Jav...
 
Xxx
XxxXxx
Xxx
 
Ch9 .Best Practices for Class-Based Views
Ch9 .Best Practices  for  Class-Based ViewsCh9 .Best Practices  for  Class-Based Views
Ch9 .Best Practices for Class-Based Views
 
HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2
 
Stole16
Stole16Stole16
Stole16
 
Building sustainable RESTFul services
Building sustainable RESTFul servicesBuilding sustainable RESTFul services
Building sustainable RESTFul services
 
Building Cross Platform Mobile Web Apps
Building Cross Platform Mobile Web AppsBuilding Cross Platform Mobile Web Apps
Building Cross Platform Mobile Web Apps
 
A Snapshot of the Mobile HTML5 Revolution
A Snapshot of the Mobile HTML5 RevolutionA Snapshot of the Mobile HTML5 Revolution
A Snapshot of the Mobile HTML5 Revolution
 
Session 2
Session 2Session 2
Session 2
 
Unique features of windows 8
Unique features of windows 8Unique features of windows 8
Unique features of windows 8
 
Geb qa fest2017
Geb qa fest2017Geb qa fest2017
Geb qa fest2017
 
Desenvolvimento web com Ruby on Rails (extras)
Desenvolvimento web com Ruby on Rails (extras)Desenvolvimento web com Ruby on Rails (extras)
Desenvolvimento web com Ruby on Rails (extras)
 
YDN KR Tech Talk : Pipes 와 YQL 활용하기
YDN KR Tech Talk : Pipes 와 YQL 활용하기YDN KR Tech Talk : Pipes 와 YQL 활용하기
YDN KR Tech Talk : Pipes 와 YQL 활용하기
 
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
 

Viewers also liked

PASSARELLO ESPEDITO Gerenciamiento de la_salud_tecnologia_medica_
PASSARELLO ESPEDITO Gerenciamiento de la_salud_tecnologia_medica_PASSARELLO ESPEDITO Gerenciamiento de la_salud_tecnologia_medica_
PASSARELLO ESPEDITO Gerenciamiento de la_salud_tecnologia_medica_Espedito Passarello
 
Prof espedito passarello_tercerizacion_outsourcing_y_garantia_de_la_calidad_e...
Prof espedito passarello_tercerizacion_outsourcing_y_garantia_de_la_calidad_e...Prof espedito passarello_tercerizacion_outsourcing_y_garantia_de_la_calidad_e...
Prof espedito passarello_tercerizacion_outsourcing_y_garantia_de_la_calidad_e...Espedito Passarello
 
PASSARELLO ESPEDITO Centros integrados informacion_nota
PASSARELLO ESPEDITO Centros integrados informacion_notaPASSARELLO ESPEDITO Centros integrados informacion_nota
PASSARELLO ESPEDITO Centros integrados informacion_notaEspedito Passarello
 
Passarello gobierno electronico__sociedad_de_la_informacion_consejo_profesion...
Passarello gobierno electronico__sociedad_de_la_informacion_consejo_profesion...Passarello gobierno electronico__sociedad_de_la_informacion_consejo_profesion...
Passarello gobierno electronico__sociedad_de_la_informacion_consejo_profesion...Espedito Passarello
 
66229709 seleccion-de-metodologias-de-desarrollo
66229709 seleccion-de-metodologias-de-desarrollo66229709 seleccion-de-metodologias-de-desarrollo
66229709 seleccion-de-metodologias-de-desarrolloJulio Pari
 
Casos de uso del negocio
Casos de uso del negocioCasos de uso del negocio
Casos de uso del negocioRobert Caraguay
 
PASSARELLO ESPEDITO Redes telematicas
PASSARELLO ESPEDITO Redes telematicas PASSARELLO ESPEDITO Redes telematicas
PASSARELLO ESPEDITO Redes telematicas Espedito Passarello
 
Administración del desarrollo de sistemas
Administración del desarrollo de sistemasAdministración del desarrollo de sistemas
Administración del desarrollo de sistemasPedro Aguilera
 
Fases del desarrollo de software
Fases del desarrollo de softwareFases del desarrollo de software
Fases del desarrollo de softwarenicocristdaro
 
Metodologia para el desarrollo de software
Metodologia para el desarrollo de softwareMetodologia para el desarrollo de software
Metodologia para el desarrollo de softwareCarlos Zambrano
 
Metodologias de desarrollo del software
Metodologias de desarrollo del softwareMetodologias de desarrollo del software
Metodologias de desarrollo del softwaregeurquizo
 
Lista de controles ISO/IEC 27001:2005
Lista de controles ISO/IEC 27001:2005Lista de controles ISO/IEC 27001:2005
Lista de controles ISO/IEC 27001:2005Ramiro Cid
 
Presentación calendario (2) MS PROJECT
Presentación calendario (2) MS PROJECTPresentación calendario (2) MS PROJECT
Presentación calendario (2) MS PROJECTMnoz Patricio
 
Procesos de desarrollo de Software
Procesos de desarrollo de SoftwareProcesos de desarrollo de Software
Procesos de desarrollo de Softwareolea_saavedra
 
Metodologías para desarrollo de software
Metodologías para desarrollo de softwareMetodologías para desarrollo de software
Metodologías para desarrollo de softwareAbner Garcia
 

Viewers also liked (20)

Archivos
ArchivosArchivos
Archivos
 
PASSARELLO ESPEDITO Gerenciamiento de la_salud_tecnologia_medica_
PASSARELLO ESPEDITO Gerenciamiento de la_salud_tecnologia_medica_PASSARELLO ESPEDITO Gerenciamiento de la_salud_tecnologia_medica_
PASSARELLO ESPEDITO Gerenciamiento de la_salud_tecnologia_medica_
 
Prof espedito passarello_tercerizacion_outsourcing_y_garantia_de_la_calidad_e...
Prof espedito passarello_tercerizacion_outsourcing_y_garantia_de_la_calidad_e...Prof espedito passarello_tercerizacion_outsourcing_y_garantia_de_la_calidad_e...
Prof espedito passarello_tercerizacion_outsourcing_y_garantia_de_la_calidad_e...
 
PASSARELLO ESPEDITO Centros integrados informacion_nota
PASSARELLO ESPEDITO Centros integrados informacion_notaPASSARELLO ESPEDITO Centros integrados informacion_nota
PASSARELLO ESPEDITO Centros integrados informacion_nota
 
Passarello gobierno electronico__sociedad_de_la_informacion_consejo_profesion...
Passarello gobierno electronico__sociedad_de_la_informacion_consejo_profesion...Passarello gobierno electronico__sociedad_de_la_informacion_consejo_profesion...
Passarello gobierno electronico__sociedad_de_la_informacion_consejo_profesion...
 
66229709 seleccion-de-metodologias-de-desarrollo
66229709 seleccion-de-metodologias-de-desarrollo66229709 seleccion-de-metodologias-de-desarrollo
66229709 seleccion-de-metodologias-de-desarrollo
 
Casos de uso del negocio
Casos de uso del negocioCasos de uso del negocio
Casos de uso del negocio
 
PASSARELLO ESPEDITO Redes telematicas
PASSARELLO ESPEDITO Redes telematicas PASSARELLO ESPEDITO Redes telematicas
PASSARELLO ESPEDITO Redes telematicas
 
Administración del desarrollo de sistemas
Administración del desarrollo de sistemasAdministración del desarrollo de sistemas
Administración del desarrollo de sistemas
 
05 modelo de diseño
05 modelo de diseño05 modelo de diseño
05 modelo de diseño
 
Fases del desarrollo de software
Fases del desarrollo de softwareFases del desarrollo de software
Fases del desarrollo de software
 
Metodologia para el desarrollo de software
Metodologia para el desarrollo de softwareMetodologia para el desarrollo de software
Metodologia para el desarrollo de software
 
Ing de software
Ing de softwareIng de software
Ing de software
 
Metodologias de desarrollo del software
Metodologias de desarrollo del softwareMetodologias de desarrollo del software
Metodologias de desarrollo del software
 
Lista de controles ISO/IEC 27001:2005
Lista de controles ISO/IEC 27001:2005Lista de controles ISO/IEC 27001:2005
Lista de controles ISO/IEC 27001:2005
 
Requisitos metrica
Requisitos metricaRequisitos metrica
Requisitos metrica
 
Presentación calendario (2) MS PROJECT
Presentación calendario (2) MS PROJECTPresentación calendario (2) MS PROJECT
Presentación calendario (2) MS PROJECT
 
Procesos de desarrollo de Software
Procesos de desarrollo de SoftwareProcesos de desarrollo de Software
Procesos de desarrollo de Software
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Metodologías para desarrollo de software
Metodologías para desarrollo de softwareMetodologías para desarrollo de software
Metodologías para desarrollo de software
 

Similar to Develop Windows 8 Apps with Focus on Quality User Experience

Create a mobile web app with Sencha Touch
Create a mobile web app with Sencha TouchCreate a mobile web app with Sencha Touch
Create a mobile web app with Sencha TouchJames Pearce
 
Cape Town MS Developer User Group: Xamarin Community Toolkit
Cape Town MS Developer User Group: Xamarin Community ToolkitCape Town MS Developer User Group: Xamarin Community Toolkit
Cape Town MS Developer User Group: Xamarin Community ToolkitJavier Suárez Ruiz
 
Building iPad apps with Flex - 360Flex
Building iPad apps with Flex - 360FlexBuilding iPad apps with Flex - 360Flex
Building iPad apps with Flex - 360Flexdanielwanja
 
After max+phonegap
After max+phonegapAfter max+phonegap
After max+phonegapyangdj
 
混搭移动开发:PhoneGap+JQurey+Dreamweaver
混搭移动开发:PhoneGap+JQurey+Dreamweaver混搭移动开发:PhoneGap+JQurey+Dreamweaver
混搭移动开发:PhoneGap+JQurey+Dreamweaveryangdj
 
A mobile web app for Android in 75 minutes
A mobile web app for Android in 75 minutesA mobile web app for Android in 75 minutes
A mobile web app for Android in 75 minutesJames Pearce
 
Html5 and web technology update
Html5 and web technology updateHtml5 and web technology update
Html5 and web technology updateDoug Domeny
 
Connect.js - Exploring React.Native
Connect.js - Exploring React.NativeConnect.js - Exploring React.Native
Connect.js - Exploring React.Nativejoshcjensen
 
Building iPhone Web Apps using "classic" Domino
Building iPhone Web Apps using "classic" DominoBuilding iPhone Web Apps using "classic" Domino
Building iPhone Web Apps using "classic" DominoRob Bontekoe
 
HTML5 New and Improved
HTML5   New and ImprovedHTML5   New and Improved
HTML5 New and ImprovedTimothy Fisher
 
Oracle MAF real life OOW.pptx
Oracle MAF real life OOW.pptxOracle MAF real life OOW.pptx
Oracle MAF real life OOW.pptxLuc Bors
 
Introduction to Palm's Mojo SDK
Introduction to Palm's Mojo SDKIntroduction to Palm's Mojo SDK
Introduction to Palm's Mojo SDKBrendan Lim
 
jQuery Mobile
jQuery MobilejQuery Mobile
jQuery Mobilemowd8574
 
Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0
Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0
Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0Arun Gupta
 
Big Data for each one of us
Big Data for each one of usBig Data for each one of us
Big Data for each one of usOSCON Byrum
 
ILUG 2010 - Deploying plug-ins to the enterprise
ILUG 2010 - Deploying plug-ins to the enterpriseILUG 2010 - Deploying plug-ins to the enterprise
ILUG 2010 - Deploying plug-ins to the enterpriseRené Winkelmeyer
 
Hyperproductive JSF 2.0 @ JavaOne Brazil 2010
Hyperproductive JSF 2.0 @ JavaOne Brazil 2010Hyperproductive JSF 2.0 @ JavaOne Brazil 2010
Hyperproductive JSF 2.0 @ JavaOne Brazil 2010Arun Gupta
 
Python Code Camp for Professionals 1/4
Python Code Camp for Professionals 1/4Python Code Camp for Professionals 1/4
Python Code Camp for Professionals 1/4DEVCON
 

Similar to Develop Windows 8 Apps with Focus on Quality User Experience (20)

Create a mobile web app with Sencha Touch
Create a mobile web app with Sencha TouchCreate a mobile web app with Sencha Touch
Create a mobile web app with Sencha Touch
 
Cape Town MS Developer User Group: Xamarin Community Toolkit
Cape Town MS Developer User Group: Xamarin Community ToolkitCape Town MS Developer User Group: Xamarin Community Toolkit
Cape Town MS Developer User Group: Xamarin Community Toolkit
 
Building iPad apps with Flex - 360Flex
Building iPad apps with Flex - 360FlexBuilding iPad apps with Flex - 360Flex
Building iPad apps with Flex - 360Flex
 
After max+phonegap
After max+phonegapAfter max+phonegap
After max+phonegap
 
混搭移动开发:PhoneGap+JQurey+Dreamweaver
混搭移动开发:PhoneGap+JQurey+Dreamweaver混搭移动开发:PhoneGap+JQurey+Dreamweaver
混搭移动开发:PhoneGap+JQurey+Dreamweaver
 
A mobile web app for Android in 75 minutes
A mobile web app for Android in 75 minutesA mobile web app for Android in 75 minutes
A mobile web app for Android in 75 minutes
 
Html5 and web technology update
Html5 and web technology updateHtml5 and web technology update
Html5 and web technology update
 
Connect.js - Exploring React.Native
Connect.js - Exploring React.NativeConnect.js - Exploring React.Native
Connect.js - Exploring React.Native
 
Building iPhone Web Apps using "classic" Domino
Building iPhone Web Apps using "classic" DominoBuilding iPhone Web Apps using "classic" Domino
Building iPhone Web Apps using "classic" Domino
 
HTML5 New and Improved
HTML5   New and ImprovedHTML5   New and Improved
HTML5 New and Improved
 
Oracle MAF real life OOW.pptx
Oracle MAF real life OOW.pptxOracle MAF real life OOW.pptx
Oracle MAF real life OOW.pptx
 
Introduction to Palm's Mojo SDK
Introduction to Palm's Mojo SDKIntroduction to Palm's Mojo SDK
Introduction to Palm's Mojo SDK
 
Introduction to Html5
Introduction to Html5Introduction to Html5
Introduction to Html5
 
jQuery Mobile
jQuery MobilejQuery Mobile
jQuery Mobile
 
Wpf Introduction
Wpf IntroductionWpf Introduction
Wpf Introduction
 
Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0
Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0
Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0
 
Big Data for each one of us
Big Data for each one of usBig Data for each one of us
Big Data for each one of us
 
ILUG 2010 - Deploying plug-ins to the enterprise
ILUG 2010 - Deploying plug-ins to the enterpriseILUG 2010 - Deploying plug-ins to the enterprise
ILUG 2010 - Deploying plug-ins to the enterprise
 
Hyperproductive JSF 2.0 @ JavaOne Brazil 2010
Hyperproductive JSF 2.0 @ JavaOne Brazil 2010Hyperproductive JSF 2.0 @ JavaOne Brazil 2010
Hyperproductive JSF 2.0 @ JavaOne Brazil 2010
 
Python Code Camp for Professionals 1/4
Python Code Camp for Professionals 1/4Python Code Camp for Professionals 1/4
Python Code Camp for Professionals 1/4
 

More from netmind

Kanban Method Lean Kanban University
Kanban Method Lean Kanban UniversityKanban Method Lean Kanban University
Kanban Method Lean Kanban Universitynetmind
 
DSDM Frameworks for Agile Project Management Offices
DSDM Frameworks for Agile Project Management OfficesDSDM Frameworks for Agile Project Management Offices
DSDM Frameworks for Agile Project Management Officesnetmind
 
Team Kanban Practitioner
Team Kanban PractitionerTeam Kanban Practitioner
Team Kanban Practitionernetmind
 
KMP I: Kanban System Design
KMP I: Kanban System DesignKMP I: Kanban System Design
KMP I: Kanban System Designnetmind
 
DASA Meetup Madrid 2018
DASA Meetup Madrid 2018DASA Meetup Madrid 2018
DASA Meetup Madrid 2018netmind
 
Escape from Earth en PMI ® EMEA 2018
Escape from Earth en PMI ® EMEA 2018Escape from Earth en PMI ® EMEA 2018
Escape from Earth en PMI ® EMEA 2018netmind
 
Las 5 claves de la gamificación en el aprendizaje de COBIT®
Las 5 claves de la gamificación en el aprendizaje de COBIT®Las 5 claves de la gamificación en el aprendizaje de COBIT®
Las 5 claves de la gamificación en el aprendizaje de COBIT®netmind
 
DevOps - Certificación oficial DASA
DevOps - Certificación oficial DASADevOps - Certificación oficial DASA
DevOps - Certificación oficial DASAnetmind
 
Comunidades de Práctica
Comunidades de PrácticaComunidades de Práctica
Comunidades de Prácticanetmind
 
PMBOK® 6ª edición NOVEDADES
PMBOK® 6ª edición NOVEDADESPMBOK® 6ª edición NOVEDADES
PMBOK® 6ª edición NOVEDADESnetmind
 
CERTIFICACIONES PMI®
CERTIFICACIONES PMI®CERTIFICACIONES PMI®
CERTIFICACIONES PMI®netmind
 
Seminario Tendencias en Gestión de Proyectos
Seminario Tendencias en Gestión de ProyectosSeminario Tendencias en Gestión de Proyectos
Seminario Tendencias en Gestión de Proyectosnetmind
 
MSP Managing Successful Programmes
MSP Managing Successful ProgrammesMSP Managing Successful Programmes
MSP Managing Successful Programmesnetmind
 
MoP - Management of Portfolios
MoP - Management of PortfoliosMoP - Management of Portfolios
MoP - Management of Portfoliosnetmind
 
Foundations of the Scaled Agile Framework® (SAFe® ) 4.5
Foundations of the Scaled Agile Framework® (SAFe® ) 4.5Foundations of the Scaled Agile Framework® (SAFe® ) 4.5
Foundations of the Scaled Agile Framework® (SAFe® ) 4.5netmind
 
Management 3.0
Management 3.0Management 3.0
Management 3.0netmind
 
Arquitectura de Empresa TOGAF
Arquitectura de Empresa TOGAFArquitectura de Empresa TOGAF
Arquitectura de Empresa TOGAFnetmind
 
CAS 2017 Miquel Rodríguez - Taller Training from the BACK of the Room
CAS 2017 Miquel Rodríguez - Taller Training from the BACK of the Room CAS 2017 Miquel Rodríguez - Taller Training from the BACK of the Room
CAS 2017 Miquel Rodríguez - Taller Training from the BACK of the Room netmind
 
CAS 2017 Aleix Palau - Peer Learning Universities. Aprendiendo de los desafío...
CAS 2017 Aleix Palau - Peer Learning Universities. Aprendiendo de los desafío...CAS 2017 Aleix Palau - Peer Learning Universities. Aprendiendo de los desafío...
CAS 2017 Aleix Palau - Peer Learning Universities. Aprendiendo de los desafío...netmind
 
CAS 2017 Alfred Maeso - Business Analysis: Superpoderes para el Product Owner
CAS 2017 Alfred Maeso - Business Analysis: Superpoderes para el Product OwnerCAS 2017 Alfred Maeso - Business Analysis: Superpoderes para el Product Owner
CAS 2017 Alfred Maeso - Business Analysis: Superpoderes para el Product Ownernetmind
 

More from netmind (20)

Kanban Method Lean Kanban University
Kanban Method Lean Kanban UniversityKanban Method Lean Kanban University
Kanban Method Lean Kanban University
 
DSDM Frameworks for Agile Project Management Offices
DSDM Frameworks for Agile Project Management OfficesDSDM Frameworks for Agile Project Management Offices
DSDM Frameworks for Agile Project Management Offices
 
Team Kanban Practitioner
Team Kanban PractitionerTeam Kanban Practitioner
Team Kanban Practitioner
 
KMP I: Kanban System Design
KMP I: Kanban System DesignKMP I: Kanban System Design
KMP I: Kanban System Design
 
DASA Meetup Madrid 2018
DASA Meetup Madrid 2018DASA Meetup Madrid 2018
DASA Meetup Madrid 2018
 
Escape from Earth en PMI ® EMEA 2018
Escape from Earth en PMI ® EMEA 2018Escape from Earth en PMI ® EMEA 2018
Escape from Earth en PMI ® EMEA 2018
 
Las 5 claves de la gamificación en el aprendizaje de COBIT®
Las 5 claves de la gamificación en el aprendizaje de COBIT®Las 5 claves de la gamificación en el aprendizaje de COBIT®
Las 5 claves de la gamificación en el aprendizaje de COBIT®
 
DevOps - Certificación oficial DASA
DevOps - Certificación oficial DASADevOps - Certificación oficial DASA
DevOps - Certificación oficial DASA
 
Comunidades de Práctica
Comunidades de PrácticaComunidades de Práctica
Comunidades de Práctica
 
PMBOK® 6ª edición NOVEDADES
PMBOK® 6ª edición NOVEDADESPMBOK® 6ª edición NOVEDADES
PMBOK® 6ª edición NOVEDADES
 
CERTIFICACIONES PMI®
CERTIFICACIONES PMI®CERTIFICACIONES PMI®
CERTIFICACIONES PMI®
 
Seminario Tendencias en Gestión de Proyectos
Seminario Tendencias en Gestión de ProyectosSeminario Tendencias en Gestión de Proyectos
Seminario Tendencias en Gestión de Proyectos
 
MSP Managing Successful Programmes
MSP Managing Successful ProgrammesMSP Managing Successful Programmes
MSP Managing Successful Programmes
 
MoP - Management of Portfolios
MoP - Management of PortfoliosMoP - Management of Portfolios
MoP - Management of Portfolios
 
Foundations of the Scaled Agile Framework® (SAFe® ) 4.5
Foundations of the Scaled Agile Framework® (SAFe® ) 4.5Foundations of the Scaled Agile Framework® (SAFe® ) 4.5
Foundations of the Scaled Agile Framework® (SAFe® ) 4.5
 
Management 3.0
Management 3.0Management 3.0
Management 3.0
 
Arquitectura de Empresa TOGAF
Arquitectura de Empresa TOGAFArquitectura de Empresa TOGAF
Arquitectura de Empresa TOGAF
 
CAS 2017 Miquel Rodríguez - Taller Training from the BACK of the Room
CAS 2017 Miquel Rodríguez - Taller Training from the BACK of the Room CAS 2017 Miquel Rodríguez - Taller Training from the BACK of the Room
CAS 2017 Miquel Rodríguez - Taller Training from the BACK of the Room
 
CAS 2017 Aleix Palau - Peer Learning Universities. Aprendiendo de los desafío...
CAS 2017 Aleix Palau - Peer Learning Universities. Aprendiendo de los desafío...CAS 2017 Aleix Palau - Peer Learning Universities. Aprendiendo de los desafío...
CAS 2017 Aleix Palau - Peer Learning Universities. Aprendiendo de los desafío...
 
CAS 2017 Alfred Maeso - Business Analysis: Superpoderes para el Product Owner
CAS 2017 Alfred Maeso - Business Analysis: Superpoderes para el Product OwnerCAS 2017 Alfred Maeso - Business Analysis: Superpoderes para el Product Owner
CAS 2017 Alfred Maeso - Business Analysis: Superpoderes para el Product Owner
 

Recently uploaded

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 

Recently uploaded (20)

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 

Develop Windows 8 Apps with Focus on Quality User Experience

  • 1. F O C U S Q U A L I T Y E X P E R I E N C E Desarrollo Windows 8 Xavier Saladié xavisf@expert.netmind.es Barcelona, Noviembre 2012 Desarrollo Windows 8 Contenidos  Plataforma Aplicaciones Windows 8  Tools  UI Controls  Appbar  FlipView  ListView, Grouping y Semantic zoom  Contratos  Notificaciones  Puntos claves para publicar en el Store
  • 2.
  • 3.
  • 4. Tu aplicación Llamadas Directas Process.exe (C#,VB.Net, C++) o WinRT APIs Core OS WWAHost.exe (HTML/JS) Llamadas Delegadas Broker Contenedor+ Código Firmado y Verificado AppXManifest
  • 5. La app toma 5s para La App no es entrar en suspensión notificada antes de terminarse Usuario Lanza App Las apps son informadas cuando se las ha reanudado Pantalla Splash
  • 6. • App usan sus datos y los almacena localmente Local Storage La información se sincroniza desde la cuenta Microsoft del usuario
  • 7.
  • 8. The development tools are FREE! If you use a higher SKU, it just works! Files / Assets AppXManifest.xml BlockMap Signature Zip Central Directory .appx package
  • 9.
  • 11.
  • 12.
  • 13. Spell Checking Clear Button Reveal Button <!– Paso 1: declarar el control --> <div id=“list” data-win-control="WinJS.UI.ListView" data-win- options="{ selectionMode: 'none' }"></div> /* Paso 2: Llamar a WinJS.UI.processAll() */ /* Paso 3: Usar el control */ document.getElementById(‘list’).winControl.addEventListener (‘selectionchanged’, onSelChanged );
  • 14. <Page x:Class="CSharpWinRT.BlankPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:CSharpWinRT" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <Button Content="La caja de Pandora" Click="Button_Click_1" Height="81" Margin="0,365,0,322" Width="248" HorizontalAlignment="Center" FontWeight="Normal" FontSize="22" /> <Image x:Name="selectedImage" Width="600" HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="Uniform" Margin="383,384,383,383" > </Image> </Grid> </Page>
  • 15. Se utiliza para mostrar las acciones de una ventana. Se mantiene oculta. Puede cambiar en función de la pantalla. Se activa con el botón derecho Iconos: http://msdn.microsoft.com/en-us/library/windows/apps/hh770557.aspx
  • 16. <Page.BottomAppBar> <AppBar x:Name="BottomAppBar1" Padding="10,0,10,0" AutomationProperties.Name="Bottom App Bar"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="50*"/> <ColumnDefinition Width="50*"/> </Grid.ColumnDefinitions> <StackPanel x:Name="LeftPanel" Orientation="Horizontal" Grid.Column="0" HorizontalAlignment="Left"> <Button x:Name="Edit" Style="{StaticResource EditAppBarButtonStyle}" Tag="Edit"/> <Button x:Name="Save" Style="{StaticResource SaveAppBarButtonStyle}" Tag="Save"/> <Button x:Name="Delete" Style="{StaticResource DeleteAppBarButtonStyle}" Tag="Delete"/> </StackPanel> <StackPanel x:Name="RightPanel" Orientation="Horizontal" Grid.Column="1" HorizontalAlignment="Right"> <Button x:Name="Refresh" Style="{StaticResource RefreshAppBarButtonStyle}" Tag="Refresh"/> <Button x:Name="Previous" Style="{StaticResource PreviousAppBarButtonStyle}" Tag="Previous"/> <Button x:Name="Next" Style="{StaticResource NextAppBarButtonStyle}" Tag="Next"/> <Button x:Name="Help" Style="{StaticResource HelpAppBarButtonStyle}" Tag="Help"/> </StackPanel> </Grid> </AppBar> </Page.BottomAppBar>
  • 17. public MyPage() { this.InitializeComponent(); Back.Click += Back_Click; } private void Back_Click(object sender, RoutedEventArgs e) { if (this.Frame.CanGoBack) { Frame.GoBack(); } }
  • 18. Muestra una colección de elementos. Genera un avance y retroceso por defecto. Se pueden utilizar plantillas para el contenido.
  • 19. <FlipView x:Name="flipView1" Width="480" Height="270" BorderBrush="Black" BorderThickness="1"> <FlipView.ItemTemplate> <DataTemplate> <Grid> <Image Width="480" Height="270" Source="{Binding Image}" Stretch="UniformToFill"/> <Border Background="#A5000000" Height="80" VerticalAlignment="Bottom"> <TextBlock Text="{Binding Name}" FontFamily="Segoe UI" FontSize="26.667" Foreground="#CCFFFFFF" Padding="15,20"/> </Border> </Grid> </DataTemplate> </FlipView.ItemTemplate> </FlipView>
  • 20. Permite mostrar listados de información. Hace uso de plantillas para configurar el contenido.
  • 21. <ListView x:Name="ItemListView" Width="Auto" Height="Auto" HorizontalAlignment="Left" Background="{StaticResource ApplicationPageBackgroundThemeBrush}" ItemTemplate="{StaticResource StoreFrontTileTemplate}" ItemContainerStyle="{StaticResource StoreFrontLVTileStyle}" BorderBrush="LightGray" BorderThickness="1" VerticalAlignment="Stretch" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto" SelectionMode="None"/> <!– List View Resources --> <DataTemplate x:Key="StoreFrontTileTemplate"> <Grid HorizontalAlignment="Left" Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <StackPanel Orientation="Horizontal" Margin="10,10,0,0"> <Image Source="{Binding Image}" Height="60" Width="60" VerticalAlignment="Center" Margin="0,0,10,0"/> <StackPanel Margin="0,0,0,0" Orientation="Vertical"> <TextBlock TextWrapping="Wrap" Foreground="{StaticResource ApplicationForegroundThemeBrush}" Style="{StaticResource ItemTitleStyle}" Width="200“ VerticalAlignment="Center" Text="{Binding Title}" HorizontalAlignment="Left" FontFamily="Segoe UI" /> <TextBlock TextWrapping="Wrap" Foreground="{StaticResource ApplicationForegroundThemeBrush}" Style="{StaticResource ItemSubtitleStyle}“ Width="200" MaxHeight="20" VerticalAlignment="Center" Text="{Binding Category}" HorizontalAlignment="Left"/> </StackPanel> </StackPanel> </Grid> </DataTemplate> <Style x:Key="StoreFrontLVTileStyle" TargetType="ListViewItem"> <Setter Property="FontFamily" Value="Segoe UI" /> <Setter Property="Height" Value="80" /> <Setter Property="Width" Value="292" /> <Setter Property="Padding" Value="0" /> <Setter Property="Margin" Value="0,0,8,8" /> <Setter Property="HorizontalContentAlignment" Value="Left" /> <Setter Property="VerticalContentAlignment" Value="Top" /> <Setter Property="BorderThickness" Value="0"/> <Setter Property="TabNavigation" Value="Local" /> </Style>
  • 22. Nos permite agrupar la información. La forma de crear grupos es personalizada. Se utiliza el control ListView como base.
  • 23. <Page.Resources> <CollectionViewSource x:Name="cvs1" IsSourceGrouped="true" /> </Page.Resources> <GridView x:Name="ItemsByCategory" VerticalAlignment="Bottom" ItemsSource="{Binding Source={StaticResource cvs1}}" BorderBrush="{StaticResource ApplicationForegroundThemeBrush}" BorderThickness="1"> <GridView.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal"/> </ItemsPanelTemplate> </GridView.ItemsPanel> <GridView.ItemTemplate> <DataTemplate> <Grid HorizontalAlignment="Left" Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <StackPanel Orientation="Horizontal" Margin="10,10,0,0"> <Image Source="{Binding Image}" Height="60" Width="60" VerticalAlignment="Center" Margin="0,0,10,0"/> <StackPanel Margin="0,0,0,0" Orientation="Vertical"> <TextBlock TextWrapping="Wrap" Width="200" VerticalAlignment="Center" Text="{Binding Title}" HorizontalAlignment="Left" FontFamily="Segoe UI" /> </StackPanel> </StackPanel> </Grid> </DataTemplate> </GridView.ItemTemplate> <GridView.GroupStyle> <GroupStyle> <GroupStyle.HeaderTemplate> <DataTemplate> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}" Margin="0"> <TextBlock Text='{Binding Key}' Foreground="Gray" FontSize="25" Margin="5" /> </Grid> </DataTemplate> </GroupStyle.HeaderTemplate> <GroupStyle.Panel> <ItemsPanelTemplate> <VariableSizedWrapGrid Orientation="Vertical" Height="400" /> </ItemsPanelTemplate> </GroupStyle.Panel> </GroupStyle> </GridView.GroupStyle> </GridView>
  • 24. internal List<GroupInfoList<object>> GetGroupsByCategory() { List<GroupInfoList<object>> groups = new List<GroupInfoList<object>>(); var query = from item in Collection orderby ((Item)item).Category group item by ((Item)item).Category into g select new { GroupName = g.Key, Items = g }; foreach (var g in query) { GroupInfoList<object> info = new GroupInfoList<object>(); info.Key = g.GroupName; foreach (var item in g.Items) { info.Add(item); } groups.Add(info); } return groups; } public class GroupInfoList<T> : List<object> { public object Key { get; set; } public new IEnumerator<object> GetEnumerator() { return (System.Collections.Generic.IEnumerator<object>)base.GetEnumerator();} } List<GroupInfoList<object>> dataCategory = _storeData.GetGroupsByCategory(); cvs1.Source = dataCategory;
  • 25.
  • 26. <Grid x:Name="ContentPanel" VerticalAlignment="Top" HorizontalAlignment="Left"> <SemanticZoom x:Name="semanticZoom" VerticalAlignment="Bottom"> <SemanticZoom.ZoomedOutView> <GridView ScrollViewer.IsHorizontalScrollChainingEnabled="False"> <GridView.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Group.Key}" FontFamily="Segoe UI Light" FontSize="24"/> </DataTemplate> </GridView.ItemTemplate> <GridView.ItemsPanel> <ItemsPanelTemplate> <WrapGrid ItemWidth="75" ItemHeight="75" MaximumRowsOrColumns="1“ VerticalChildrenAlignment="Center" /> </ItemsPanelTemplate> </GridView.ItemsPanel> <GridView.ItemContainerStyle> <Style TargetType="GridViewItem"> <Setter Property="Margin" Value="4" /> <Setter Property="Padding" Value="10" /> <Setter Property="BorderBrush" Value="Gray" /> <Setter Property="BorderThickness" Value="1" /> <Setter Property="HorizontalContentAlignment" Value="Center" /> <Setter Property="VerticalContentAlignment" Value="Center" /> </Style> </GridView.ItemContainerStyle> </GridView> </SemanticZoom.ZoomedOutView> List<GroupInfoList<object>> dataLetter = _storeData.GetGroupsByLetter(); cvs2.Source = dataLetter; (semanticZoom.ZoomedOutView as ListViewBase).ItemsSource = cvs2.View.CollectionGroups;
  • 27. <SemanticZoom.ZoomedInView> <GridView ItemsSource="{Binding Source={StaticResource cvs2}}" IsSwipeEnabled="True" ScrollViewer.IsHorizontalScrollChainingEnabled="False"> <GridView.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal" Margin="10,10,0,0" HorizontalAlignment="Left" Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <Image Source="{Binding Image}" Height="60" Width="60" VerticalAlignment="Center" Margin="0,0,10,0"/> <TextBlock TextWrapping="Wrap" Foreground="{StaticResource ApplicationForegroundThemeBrush}" Width="200“ VerticalAlignment="Center“ Text="{Binding Title}" HorizontalAlignment="Left" FontFamily="Segoe UI" /> </StackPanel> </DataTemplate> </GridView.ItemTemplate> <GridView.GroupStyle> <GroupStyle> <GroupStyle.HeaderTemplate> <DataTemplate> <TextBlock Text='{Binding Key}' Foreground="{StaticResource ApplicationForegroundThemeBrush}" Margin="5" FontSize="18“ FontFamily="Segoe UI Light" /> </DataTemplate> </GroupStyle.HeaderTemplate> <GroupStyle.ContainerStyle> <Style TargetType="GroupItem"> <Setter Property="Template"> ….
  • 28.
  • 29.
  • 30.
  • 31.
  • 32. //override in app the handler to OnWindowCreated protected override void OnWindowCreated(WindowCreatedEventArgs args) { // Register QuerySubmitted handler for the window at window creation time SearchPane.GetForCurrentView().QuerySubmitted += new TypedEventHandler<SearchPane, SearchPaneQuerySubmittedEventArgs>(OnQuerySubmitted);} private void OnQuerySubmitted(SearchPane sender, SearchPaneQuerySubmittedEventArgs args) { // Process the query if (MainPage.Current != null) { MainPage.Current.ProcessQueryText(args.QueryText);} }
  • 33.
  • 34. protected override void OnNavigatedTo(NavigationEventArgs e) { // Register the current page as a share source. this.dataTransferManager = DataTransferManager.GetForCurrentView(); this.dataTransferManager.DataRequested += new TypedEventHandler<DataTransferManager, DataRequestedEventArgs>(this.OnDataRequested); } protected override void OnNavigatedFrom(NavigationEventArgs e) { // Unregister the current page as a share source. this.dataTransferManager.DataRequested -= new TypedEventHandler<DataTransferManager, DataRequestedEventArgs>(this.OnDataRequested); } // When share is invoked the event handler will be called to populate the datapackage. private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs e) { bool succeeded = false; string dataPackageText = TextToShare.Text; if (!String.IsNullOrEmpty(dataPackageText)) { DataPackage requestData = e.request.Data; requestData.Properties.Title = TitleInputBox.Text; requestData.Properties.Description = DescriptionInputBox.Text; requestData.SetText(dataPackageText); succeeded = true; } else { e.request.FailWithDisplayText("Enter the text you would like to share and try again."); } return succeeded; }
  • 35. Permite recibir información de otras apps. Puede permitir distintos formatos. Se activa al seleccionar la app dentro de Share.
  • 36. //On App we override the event for Share Targeting Activated and navigate to the Page receiving data protected override void OnShareTargetActivated(ShareTargetActivatedEventArgs args) { var rootFrame = new Frame(); rootFrame.Navigate(typeof(MainPage), args.ShareOperation); Window.Current.Content = rootFrame; Window.Current.Activate(); } //On NavigateTo event of the page receiving data, we just do it asynchronously protected override async void OnNavigatedTo(NavigationEventArgs e) { // It is recommended to only retrieve the ShareOperation object in the activation handler, return as // quickly as possible, and retrieve all data from the share target asynchronously. this.shareOperation = (ShareOperation)e.Parameter; await Task.Factory.StartNew(async () => { // Retrieve the data package properties. this.sharedDataTitle = this.shareOperation.Data.Properties.Title; this.sharedDataDescription = this.shareOperation.Data.Properties.Description; this.sharedThumbnailStreamRef = this.shareOperation.Data.Properties.Thumbnail; this.shareQuickLinkId = this.shareOperation.QuickLinkId; // Retrieve the data package content. if (this.shareOperation.Data.Contains(StandardDataFormats.Uri)) { // The GetUriAsync() API will throw if there was an error retrieving data. try { this.sharedUri = await this.shareOperation.Data.GetUriAsync(); } catch (Exception ex) { … } }
  • 37.
  • 38. Square (1x1) Wide (2x1)
  • 39.
  • 40. IWideTileNotificationContent tileContent = null; ITileWideImageAndText01 wideContent = TileContentFactory.CreateTileWideImageAndText01(); wideContent.RequireSquareContent = false; wideContent.TextCaptionWrap.Text = "The image is in the appx package"; wideContent.Image.Src = "ms-appx:///images/redWide.png"; wideContent.Image.Alt = "Red image"; tileContent = wideContent; // Users can resize tiles to square or wide. // Apps can choose to include only square assets (meaning the app's tile can never be wide), or // include both wide and square assets (the user can resize the tile to square or wide). // Apps cannot include only wide assets. Apps that support being wide should include square tile // notifications since users determine the size of the tile. // create the square template and attach it to the wide template ITileSquareText04 squareContent = TileContentFactory.CreateTileSquareText04(); squareContent.TextBodyWrap.Text = "Hello World! My very own tile notification"; tileContent.SquareContent = squareContent; TileUpdateManager.CreateTileUpdaterForApplication().Update(tileContent.CreateNotification()); http://msdn.microsoft.com/en-us/library/windows/apps/hh913756.aspx http://msdn.microsoft.com/en-us/library/windows/apps/xaml/Hh868255(v=win.10).aspx
  • 44. Permite añadir segundos accesos a una app. El usuario siempre debe aprobar este segundo tile. Es posible actualizar su contenido.
  • 45. // Prepare package images for use as the Tile Logo and small Logo in our tile to be pinned Uri logo = new Uri("ms-appx:///Assets/squareTile-sdk.png"); Uri smallLogo = new Uri("ms-appx:///Assets/smallTile-sdk.png"); // In this sample, we'll pass in the date and time the secondary tile was pinned. public const string SecTileId = "SecondaryTileId" string tArguments = SecTileId + " WasPinnedAt=" + DateTime.Now.ToLocalTime().ToString(); // Create a 1x1 Secondary tile SecondaryTile secTile = new SecondaryTile(SecTileId, "Title text", "Name when searching", tArguments, TileOptions.ShowNameOnLogo, logo); secTile.ForegroundText = ForegroundText.Dark; secTile.SmallLogo = smallLogo; // OK, the tile is created and we can now attempt to pin the tile. bool isPinned = await SecTile.RequestCreateForSelectionAsync( MainPage.GetElementRect((FrameworkElement)sender),Windows.UI.Popups.Placement.Below); // Typical OnLaunched override Method of App.xaml.cs async protected override void OnLaunched(LaunchActivatedEventArgs args) { if (args.PreviousExecutionState == ApplicationExecutionState.Terminated) { // Do an asynchronous restore await RestoreData() } if (Window.Current.Content == null) { var rootFrame = new Frame(); rootFrame.Navigate(typeof(MainPage)); ((MainPage)rootFrame.Content).LaunchArgs = args; Window.Current.Content = rootFrame; } else { if (args.Arguments != “”) { //Inspect content of args and navigate where is needed } } Window.Current.Activate(); }
  • 46.
  • 47.
  • 48. IToastNotificationContent toastContent = null; IToastImageAndText03 templateContent = ToastContentFactory.CreateToastImageAndText03(); templateContent.TextHeadingWrap.Text = "Heading text that wraps"; templateContent.TextBody.Text = "Body text"; templateContent.Image.Src = "images/toastImageAndText.png"; templateContent.Image.Alt = "Placeholder image"; toastContent = templateContent; // Set the launch activation context parameter on the toast. toastContent.Launch = "Context123"; // Create a toast from content ToastNotification toast = toastContent.CreateNotification(); // create a ToastNotifier object to show the toast ToastNotificationManager.CreateToastNotifier().Show(toast);
  • 49.
  • 50. <UserControl // In app.OnLaunched and in app.OnSearchActivated we register event for managing settings x:Class="ContosoCookbook.PreferencesUserControl" // Register handler for CommandsRequested events from the settings pane xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" SettingsPane.GetForCurrentView().CommandsRequested += OnCommandsRequested; xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" void OnCommandsRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args) { // Add an About command xmlns:local="using:ContosoCookbook" var about = new SettingsCommand("about", "About", (handler) => xmlns:d="http://schemas.microsoft.com/expression/blend/2008" { var settings = new SettingsFlyout(); xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" settings.Content = new AboutUserControl(); mc:Ignorable="d" settings.HeaderBrush = new SolidColorBrush(_background); d:DesignHeight="300" = new SolidColorBrush(_background); settings.Background d:DesignWidth="400"> = "About"; settings.HeaderText <Grid> settings.IsOpen = true; }); args.Request.ApplicationCommands.Add(about); <ToggleSwitch x:Name="Remember" Header="Remember where I was" Toggled="OnToggled" /> </Grid> Preferences command // Add a var preferences = new SettingsCommand("preferences", "Preferences", (handler) => </UserControl> { var settings = new SettingsFlyout(); settings.Content = new PreferencesUserControl(); settings.HeaderBrush = new SolidColorBrush(_background); settings.Background = new SolidColorBrush(_background); settings.HeaderText = "Preferences"; settings.IsOpen = true; }); args.Request.ApplicationCommands.Add(preferences); }
  • 51.
  • 52.
  • 53. private void Button_Click(object sender, RoutedEventArgs e) { Flyout flyOut = new Flyout(); flyOut.PlacementTarget = sender as UIElement; flyOut.Placement = PlacementMode.Top; flyOut.Content = new FlyoutUserControl(); flyOut.IsOpen = true; }
  • 54.
  • 55. // Create the message dialog and set its content and title var msgDlg = new MessageDialog(“Updates found. Would you like to install?", "Updates"); // Add commands and set their callbacks msgDlg.Commands.Add(new UICommand("Don't install", (command) => { rootPage.NotifyUser("'Don't install' command has been selected.", NotifyType.StatusMessage); })); msgDlg.Commands.Add(new UICommand("Install updates", (command) => { rootPage.NotifyUser("'Install updates' command has been selected.", NotifyType.StatusMessage); })); // Set the command that will be invoked by default msgDlg.DefaultCommandIndex = 1; // Show the message dialog await msgDlg .ShowAsync();
  • 56.
  • 57.
  • 58.
  • 59. Escenario Deberías…. using Windows.Networking.Connectivity; ... public static bool isConnected() { var p=NetworkInformation.GetInternetConnectionProfile(); if (p!=null) { if (p.GetNetworkConnectivityLevel()==NetworkConnectivityLevel.InternetAccess) { return true } else { return false; } } else { return false; } }
  • 60.
  • 61. Anuncia con Microsoft Advertising o tu ad vendor favorito 121
  • 62. Y para terminar… Foros en español http://social.msdn.microsoft.com/Forums/es-ES/w8metroes/ Foros en inglés http://social.msdn.microsoft.com/Forums/en-US/category/windowsapps Alias de Soporte Desarrollo Windows 8 sopw8@microsoft.com
  • 63. Introducción al desarrollo de aplicaciones Metro para Windows 8 http://blogs.msdn.com/b/esmsdn/archive/2012/07/18/introducci-243-n-al- desarrollo-de-aplicaciones-metro-para-windows-8.aspx Cursos de Formación de Windows 8 http://blogs.msdn.com/b/esmsdn/archive/2012/09/04/cursos-de-formaci-243-n- de-windows-8.aspx Tips & Tricks de desarrollo para Windows 8 http://blogs.msdn.com/b/esmsdn/archive/2012/08/08/tips-amp-tricks-de- desarrollo-para-windows-8.aspx Windows 8 Metro style app samples http://code.msdn.microsoft.com/windowsapps Problemas comunes para pasar la certificación de Windows 8 http://blogs.msdn.com/b/esmsdn/archive/2012/07/31/problemas-comunes- para-pasar-la-certificaci-243-n-de-windows-8.aspx V3.0 Certification requirements http://msdn.microsoft.com/en-us/library/windows/apps/jj128432.aspx
  • 64. F O C U S Q U A L I T Y E X P E R I E N C E Preguntas y aclaraciones Muchas gracias por su atención Xavier Saladié xavisf@expert.netmind.es