« September 2012 | Main | November 2012 »

October 2012

Deep Dive Windows Store Apps in Wien

Im Rahmen der BASTA! Austria mache ich am 21. November einen kompletten Tag Windows 8 Deep Dive. In 4 Sessions geht es durch die Entwicklung einer kompletten Windows Store App. Es startet mit dem UI, geht weiter mit Daten inkl. Zugriff auf Windows Azure, Kommunikation mit anderen Applikationen, und schließlich Notification der User:

Layout Challenges mit Windows Store Apps und CSS

Die Silhouette definiert die Positionen für den Titel und Content einer Windows Store App. Das ist aber mal der einfache Teil. Es stellt sich noch die Frage der Navigations- und Command-Struktur. Diese Session behandelt verschiedene Windows Store App Patterns und ihre Implementierungen mit CSS Grid, Flexbox, Regions, Hierarchische und Flat Strukturen, Semantic Zoom und vieles mehr was das Layout von Windows Store Apps betrifft.

Daten! Daten! Daten!

Der Content ist das wichtigste für Windows Store Apps - doch was passiert mit dem Content? Anzeige und Ändern von Texten, Fotos bringen Leben in Windows Store Apps. Diese Session zeigt APIs der Windows Runtime um Daten von Windows Azure abzuholen und lokal zu speichern, sowie optimale Möglichkeiten diese Daten dem User mit Hilfe verschiedener WinRT Controls und Templates anzuzeigen, zu filtern, zu sortieren, als auch Änderungen vom User im Service zu übernehmen

Mehrwert mit Contracts

Windows Store Apps werden wertvoller wenn sie nicht für sich alleine stehen, sondern im Zusammenspiel verwendet werden können. Wie wäre es von der Applikation gleich ein Email zu verschicken, oder Fotos einer anderen Applikation zu übernehmen? Oder eigene Datentypen zu definieren die von Applikationen ausgetauscht werden können? Diese Session behandelt Windows Store Contracts wie Sharing und Search, und deren Implementierung.

Tiles, Toasts und Notification

Der erste Eindruck der User einer Windows Store App ist die Kachel (Tile). Diese kann weit mehr als nur ein Icon zeigen und sollte die Aufmerksamkeit des Users gewinnen. Aktuelle Informationen können Zeitgesteuert, aber auch über Push Notifications angezeigt werden. Auch wenn Tiles gerade nicht sichtbar sind, sind Benachrichtigungen mit Hilfe von Toasts möglich. Der User bleibt dabei aber in Kontrolle. Diese Session zeigt die Implementierung von Tiles, Secondary Tiles, Badges, und Toasts, deren Möglichkeiten und Einschränkungen, und die Implementierung in Apps.

 

See you there!

Christian

CN innovation

Calling WinRT from Windows Desktop Apps

The .NET Framework is an API that can be used from server applications, Windows desktop applications, and is available for Windows Store apps. For Windows Store apps just a subset of the framework is available. The Windows Runtime (WinRT) is an API for Windows Store apps. However, some parts of it cannot be used from Windows Store apps, only from Windows desktop apps. The Visual Studio 2012 templates doesn’t give you a direct way to reference this runtime. This article shows how this can be done.

WinRT APIs

Some of the APIs from the Windows Runtime (WinRT) cannot be called from Windows Store apps, they are only available for Windows desktop apps. The documentation of the PackageManager class (namespace Windows.Management.Deployment) shows that this API is only available for desktop apps.

image

References with Windows Store Apps

Creating a Windows Store C# project, the Reference Manager shows a Windows category along with Assemblies, Solution, and Browse:

image

References with Windows Desktop Apps

Creating a desktop application, the Reference Manager lists Assemblies, Solution, COM, and Browse. The Windows category is missing.

image

The way how to add the missing Windows category cannot be found easily. I found it by comparing the project file of a Windows store application with the project file of a console application and found this missing TargetPlatformVersion element that needs to be defined within the PropertyGroup element.

    <TargetPlatformVersion>8.0</TargetPlatformVersion>

This element can be easily added from within Visual Studio by selecting the project in Solution Explorer, using the context menu Unload Project which gives a new context menu to edit the project file.

With the RTM version of Windows Store project templates, this element is no longer used. Maybe the project type GUIDs make the difference now. However, using the TargetPlatformVersion element is documented in the MSDN library. See Windows tab –> Extension Subgroup for more information.

With this change, the Windows tab is available in the Reference Manager:

image

There’s still something missing. Compiling code including the WinRT API gives clear errors that the System.Runtime assembly is missing. This assembly needs to be referenced. This assembly is not in the default list of assemblies in the Reference Manager, but you can browse for it in the directory C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades, or add it directly to the project file.

image

Now the PackageManager from the Windows.Management.Deployment namespace together with the Package class from the Windows.ApplicationModel namespace can be used to show information about installed Windows Store apps.

      var pm = new PackageManager();
      IEnumerable<Package> packages = pm.FindPackages();
      foreach (var package in packages)
      {
        try
        {
          Console.WriteLine("Architecture: {0}", package.Id.Architecture.ToString());
          Console.WriteLine("Family: {0}", package.Id.FamilyName);
          Console.WriteLine("Full name: {0}", package.Id.FullName);
          Console.WriteLine("Name: {0}", package.Id.Name);
          Console.WriteLine("Publisher: {0}", package.Id.Publisher);
          Console.WriteLine("Publisher Id: {0}", package.Id.PublisherId);
          if (package.InstalledLocation != null)
            Console.WriteLine(package.InstalledLocation.Path);
          Console.WriteLine();
        }
        catch (FileNotFoundException ex)
        {
          Console.WriteLine("{0}, file: {1}", ex.Message, ex.FileName);
        }
      }

Thís API also requires administrative privileges, that’s why I’m adding an application manifest file to the project setting the level attribute of the requestedExecutionLevel element to requireAdministrator.

    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
      <security>
        <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
          <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
        </requestedPrivileges>
      </security>
    </trustInfo>

Now the application runs successfully showing installed Windows Store apps.

More information about the Windows Runtime can be found in my new book Professional C# 2012, and of course in my workshops.

Christian

CN innovation