Universal Windows Plattform Apps – Was ist neu?

Universal Windows Plattform Apps – Was ist neu?

Ich besuchte vor einiger Zeit die Windows 10 bis 10 Schulung von Microsoft, in der es um das Thema Einführung der Apps der universellen Windows Plattform mit Windows 10 und Visual Studio 2015 ging. Ich habe diverse Dinge über die neuen Apps gelernt und möchte mein Wissen mit euch teilen.

Starten wir das Ganze mit einem Vergleich zwischen klassischen Desktop Applikationen und den neu eingeführten Apps:

Klassische Desktop AppsUniversal Apps
Von überall installierbarNur vom Store oder über Sideloading installierbar
Kann alles mögliche während der Installation machenVordefinierte Installationsverfahren
Administrator Modus verfügbarAdmin Modus nicht verfügbar. Eingeschränkte Rechte
Kann während der Laufzeit auf das gesamte System zugreifenEingeschränkter Zugriff auf eine bestimmte Anzahl an APIs. Deklariert explizit Zugriffe
Vollständige Kommunikation mit anderen ProzessenSandbox

Man kann anhand der Tabelle sehen, dass sich Microsoft mit den Apps der universellen Windows-Plattform (UWP-Apps) ein bestimmtes Ziel gesetzt hat: Sicherheit. Das gesamte neu eingeführte System soll dem Endnutzer das Gefühl der Kontrolle geben, denn dieses fehlte bisher ganz. Ein kleines Beispiel aus meinem Alltag dazu: Meine Mutter surft im Internet und auf einmal taucht ein Pop-Up auf, mit blinkendem Text „Achtung ihr System ist sehr langsam, laden Sie unseren super seriösen Registry Cleaner herunter!„. Wie meine Mutter so ist, macht sie sich Sorgen um das Wohlergehen ihres PCs und klickt auf den seriös wirkenden Link. Eine *.exe wird heruntergeladen und nach einer Administrationsberechtigungsanfrage, die mit „Ja“ beantwortet wurde, installiert sich das Programm. Es wird ein Scan gemacht, 42 Fehler werden gefunden und um diese zu beheben muss man die Pro Version kaufen, die 119€ kostet. An diesem Zeitpunkt angelangt hat meine Mutter auch keine Lust mehr und deinstalliert das Programm. Tage später erhalte ich einen Anruf, bei dem sie mir erzählt, dass ihr Browser nun ganz komisch aussieht mit neuen Leisten und ihre Startseite lautet nun www.kaufserioeseprogramme.ru. Sie kann sich das Ganze nicht erklären und wüsste nicht woher das kommt.

Anhand dieses kleinen Beispiels können wir sehen, dass das aktuelle Applikationssystem sehr undurchsichtig für den Endnutzer ist. Der Installer des Registry Cleaners hat eine neue Taskleiste installiert und der Cleaner an sich oder sein Installer hat unbefugt auf die Startseitenoptionen des Nutzers zugegriffen, ohne seine Erlaubnis einzuholen. Diese Probleme existieren mit UWP-Apps nicht mehr.

Schauen wir uns die neuen Apps mal aus der Developer Perspektive an:

Man kann die UWP-Apps sowohl mit den altbekannten .NET Sprachen Visual Basic und C# schreiben, als auch mit C/C++ und ganz neu mit Javascript. Für die visuelle Darstellung wird bei Javascript HTML und CSS benutzt, bei den anderen Sprachen kann man zwischen dem aus WPF und Windows 8 Apps bekannten XAML Format und DirectX wählen. Microsoft vereinfacht mit Javascript Web Developern den Einstieg in die Software Programmierung immens.
Weiterhin gibt es diverse nützliche Neuerungen im Vergleich zu den Windows 8 Apps. Man sucht sich nun eine Zielplattform aus, die eine bestimmte Version des Frameworks haben muss:

Weiterhin kann man mithilfe des Reference Managers in Visual Studio ganz einfach Systemerweiterungen zur App hinzufügen, bspw. Windows.Mobile Erweiterung per one-click der App hinzufügen und prompt wird unsere App von Windows 10 fähigen mobilen Geräten unterstützt.
Die neue Bibliothek Windows.Foundation.Metadata.ApiInformation erleichtert es, hardwarespezifische Funktionen zu integrieren, wie zum Beispiel das ansteuern der Back Taste an einem Windows Phone Gerät. Zu den Neuerungen gehört auch eine Adaptive UI, d.h. ein und die selbe App sieht auf einem Windows Phone Gerät anders aus als auf einem PC. Das System ist vielen bereits vom Web Development bekannt. Einige designspezifische Funktionen sind von Haus aus aktiv, hier Desktop vs. Mobile:

Die Breakpoints, die darüber entscheiden wie der Aufbau einer App aussieht, werden in epx angegeben. Epx steht für effecitv pixels und wird mittels eines Algorithmus anhand der Parameter Userentfernung und Bildschirmgröße ermittelt:

Für XAML Developer gibt es auch ein sehr nützliches Control, das sich Relative Panel nennt. Es ermöglicht einem auf eine einfache Art und Weise die Anordnung von Elementen festzulegen, indem man sie an andere Elemente ausrichten kann:

Das nächste Feature ist wieder für XAML Developer. Es handelt sich um die Split View. Diese ermöglicht das Erstellen von aufklappbaren Menüs, vielen auch unter Burger Menus bekannt. Dieses Control besitzt einen Pane Bereich, den man mithilfe von Radio Buttons zu einem schönen Burger Menu formen kann. Die Splitview hat auch einen Content Bereich, indem man verschiedene XAML Frames darstellen lassen kann.

Mit Windows 10 wurde auch eine Hardware Klasse integriert: Internet Of Things, kurz IOT. Eine abgespeckte Version des Betriebssystem mit Namen Windows IOT kann nun auf verschiedenen Geräten aufgespielt werden. Im Seminar kam ein Raspberry Pi 2 zum Einsatz. Es wurde sehr schön dargestellt, wie die zuvor auf dem Desktop PC laufende App auf dem Raspberry Pi gestartet wurde und wie sich das Design angepasst hat. Weiterhin unterstützt das Windows Core Framework Zugriffe auf die Pins des kleinen Geräts. Somit hat man als erfahrener .NET Developer einen einfachen Einstieg in das Programmieren für IOT Geräte.

Zu guter Letzt geht es um den Windows Store. Dieser wurde bereits in Windows 8 eingeführt und man konnte dort bereits Windows 8 Apps vertreiben. Mit den Universal Apps wurde nun auch der Store überarbeitet. Es gibt nun einen öffentlichen Store, als auch einen Business Store für Firmen. Dies gibt einem die Möglichkeit, Apps spezifisch zu vertreiben als auch andere Finanzierungsmöglichkeiten anzubieten. Man muss nicht mehr einen einfachen Preis für eine App angeben, denn man kann beispielsweise Lizenzen verkaufen, die jährlich erneuert werden müssen.

Wie man sehen kann hat sich Microsoft Gedanken gemacht und ist auf viele Wünsche der User eingegangen. Ob Windows 10 und UWP-Apps sich wirklich durchsetzen werden, wird sich mit der Zeit zeigen. Mir persönlich gefallen die Neuerungen und ich freue mich auf das Experementieren mit den neuen Features.

Alle Bilder stammen aus der Präsentation von dem Seminar, diese könnt ihr hier finden.
Hier noch ein paar nützliche Ressources:
UWP Samples
XAML Samples

Nützliches Custom Control für Windows Forms Anwendungen

Nützliches Custom Control für Windows Forms Anwendungen

Der heutige Eintrag richtet sich an die C#/VB.NET Programmierer, die mit Windows Forms arbeiten. Da dies auch seit geraumer Zeit mein Hautpeinsatzgebiet ist, macht es mir besonders Spaß, heute etwas darüber zu erzählen. Ich möchte euch eine Custom Windows Forms Control vorstellen, die von einem gewissen Philip Piper erstellt wurde. Der Name dieses kleinen Wunders ist ObjectListView. Ich muss zugeben der Name ist eher funktional als episch, aber dennoch sollte dieses Custom Control bei jedem WinForms Programmierer im Repertoire sein. Die ObjectListView, ab sofort oLvw genannt, unterscheidet sich stark von der altbekannten ListView. Die oLvw ist wie der Name bereits andeutet stark objektorientiert und von Hause aus aktiv. Hier ein kleines Schaubild vom Prozess, den ich gleich erklären werde:

Source

Man kann sich das ganze grob vereinfacht so vorstellen: Man übergibt der oLvw ein Objektmodel, diese wandelt alle Objekteigenschaften in Strings um und stellt sie dar. Dieser Darstellungsprozess verläuft von vorneherein deklarativ, d.h. man beschreibt der Liste ein einziges Mal  was sie für ein Objekt erhält und was sie damit anstellen soll, diese hält sich an eure Beschreibungen und macht von da an alles automatisch. Das ganze alte System, das auf ListViewItem.Add()  basierte, fällt komplett weg. Jegliche neue Daten, die in die oLvw sollen, werden dem Quellobjekt hinzugefügt, die Liste verarbeitet das ganze wieder nach eurem Schema und stellt es dar.

Hier ein kleines Beispiel von mir: Angenommen wir haben uns eine Datenbank mit unseren bisher angesehenen Filmen erstellt und wollen diese nun in einem kleinen Tool darstellen. So etwas ist prädestiniert für die oLvw, da jegliches Update der Datenbank ein Update unserer Datenquelle bedeutet und unsere oLvw sich somit um den Rest kümmert.

  • Gehen wir davon aus, dass wir bereits eine Datenbankverknüpfung erstellt haben inklusive Tableadapter. Einfacherweise fügen wir die oLvw per Designer unserer Form hinzu. Nun kommen wir zu einer sehr überschaubaren Anzahl an Code Zeilen:
    Drei Zeilen Code und wir erhalten das unten gezeigte Bild ohne, dass wir explizit Items adden mussten:

  • Das ganze ist nun einfach und funktional, aber wir wollen, dass es auch schön aussieht. Daher gibt es auch hierfür ein paar kleine Tricks mit denen wir unsere Tabellen verschönern und besser ordnen können:

  • Weiterhin gibt es noch spaltenspezifische Funktionen, mit denen man den Inhalt der Spalte visuell verändern kann. Es gibt zum einen die Möglichkeit solche sogenannten Renderer selbst zu erstellen oder einen aus bereits vorimplementierten zu nutzen. Hier zeige ich euch wie man einfach durch einen vorimplentierten Renderer die Bewertungen in Sterne umwandeln kann:

Das war es zu dem kleinen Beispiel. Es ist nur ein ganz kleiner Einblick von dem, was dieses Custom Control überhaupt kann. Es gibt noch diverse andere Renderer sowie noch weitere Abwandlungen der oLvw, die in der selben DLL enthalten sind. Diese sind für verschiedene Projekte besser geeignet als andere und umgekehrt, beispielsweise updatet sich die DataListView von selbst, sobald die Datasource sich ändert. Alle verschiedenen ListViews und Designmöglichkeiten zu erklären, würde den Rahmen eines Blogeintrags sprengen, daher kann ich euch nur ans Herz legen, diese auf der offiziellen Seite von der ObjectListView nachzuschauen. Wenn ihr weitere Fragen habt, könnt ihr diese gerne hier stellen oder auf Facebook unter dem Post ein Kommentar hinterlassen. Wer sehr spezifische Fragen hat, kann sich auch im offiziellen Diskussionsthread melden.