SlideShare ist ein Scribd-Unternehmen logo
1 von 64
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

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
 

Was ist angesagt? (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 ...
 

Andere mochten auch

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
 

Andere mochten auch (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
 

Ähnlich wie netmind - Primer Contacto con el Desarrollo de Aplicaciones para Windows 8

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
 

Ähnlich wie netmind - Primer Contacto con el Desarrollo de Aplicaciones para Windows 8 (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
 

Mehr von 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
 

Mehr von 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
 

Kürzlich hochgeladen

Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Angeliki Cooney
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfOverkill Security
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKJago de Vreede
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfOrbitshub
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 

Kürzlich hochgeladen (20)

Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 

netmind - Primer Contacto con el Desarrollo de Aplicaciones para Windows 8

  • 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