PDC08: Windows 7, WPF, Silverlight, Office Online und das Live Framework

Am zweiten Tag der PDC gab es auch wieder einige tolle Sachen zu sehen. Dazu gehört ein erster Blick auf Windows 7 und was man im Zusammenhang mit WPF da alles tolles machen kann. Besonders interessant fand ich die Ribbon Controls für WPF.

Silverlight im Browser und ohne Browser

Besonders interessant war auch, dass Silverlight demnächst nicht nur im Browser sich tummeln kann, sondern auch als selbstständige Applikation. Damit rückt Silverlight näher an Adobes AIR heran. Silverlight Gadgets welche auf XP, Vista und MacOS wären damit gut möglich.

Office Online

Microsoft gesellt sich jetzt auch zu den Online Office Anbietern. Die Präsentation sah schon recht nett aus – das online Office ist eine recht schicke Silverlight Anwendung – mal sehn wann man näheres davon erfährt.

Das Live Framework

Im Zusammenhang mit Windows Azure kommt nun auch das Live Framework. Ich habe bereits vor einige Zeit über “Live Mesh” geschrieben – mit dem SDK kann man nun wohl auch selber “meshfähige” Anwendungen bauen. Das SDK wird es wohl heute Nacht zum Downloaden geben, jedenfalls für diejenigen die sich bei MS Connect angemeldet haben.
Die Dokumentation und Walkthoughs sind aber bereits zum Downloaden bereit – sehr schick :)
Insbesondere durch die “Browserlosen”-Silverlight Applikationen kann man da doch die ein oder andere Idee erstmal spinnen.

Ich hab auch schon eine kleine Idee… ich hoffe ich komm demnächst dazu :)

Open Source: Coverflow für WPF Applikationen und mehr

Durch Coding4Fun wurde ich heute auf ein sehr cooles CodePlex Projekt aufmerksam: FluidKit. Mit FluidKit werden einige schicke Controls mitgeliefert, welche z.B. als “Coverflow” von Apple bekannt sind.

Da Bilder bekanntlich mehr sagen als 1000 Worte, hier mal die Demoanwendung (welche mitgeliefert wird, man muss aber manuell in der App.xaml das jeweilige Element herauspicken). Beachtet auch immer mal wieder die Schieberegler – damit kann man das Verhalten anpassen.

“CustomShapes”:

image

image

image

image

“GlassWindow”

image

“DragNDrop”

image

“ElementFlow” – “CoverFlow”

image

image

“ElementFlow” – “TimeMachine”

image

ElementFlow” – “Rollercoaster”

image

ElementFlow” – “Rolodex”

image

Fazit: Ziemlich cool (und Open Source!) :)

Hier noch der Blogeintrag vom Macher selbst (ich find sein persönlichen Kommentar drunter noch witzig ;) – wer will das nicht ;) )

Unterschiede zwischen WPF und Silverlight 2

Ich stecke nicht allzu tief in der WPF oder Silverlight 2 Entwicklung, allerdings fand ich diesen Blogpost von Rob Eisenberg sehr interessant.

Wenn man ihm glaubt, sind einige Hauptkonzepte in Silverlight 2 anders gelöst als in WPF:

- Databinding
- Styles
- Trigger
- und noch einige kleinere Sachen

Das mag auf den ersten Blick nicht so tragisch aussehen, allerdings wird man im späteren Verlauf, wenn Microsoft dies nicht ändert, bemerkbar machen – dann kann man für ein Control 2 verschiedene XAMLs machen.

Das ganze wird verglichen mit CSS für Firefox und IE – sowas wollen wir doch nicht schon wieder ;)

Auch ein interessanter Aspekt: Performance. WPF hat (selbst mit Hardwareunterstützung) in Punkto Performance zu kämpfen – Silverlight hat aber keine Hardwareunterstützung. Wenn man sich diese Seite anschaut und in dem rechten Datagrid scroll "hakt" es auch etwas.

Rob entwickelt seit 4 Jahren WPF Applikationen – also seit den ersten Tagen, ist zudem noch in Flash bewandert und beschäftigt sich seit Anfang an mit Silverlight 1.1 / 2.0. Daher denke ich, dass diese Kritikpunkte nicht unglaubwürdig sind.

Ich hoffe Microsoft wird dies noch fixen.

HowTo: Databinding in WPF (& Silverlight 2) – Einstieg

In diesem HowTo geht es um den Einstieg in das Thema "Databinding" mit der Windows Presentation Foundation (was so eigentlich auch in Silverlight 2 geht).

Wer Databinding aus ASP.NET her kennt, wird sich in die WPF Databinding Möglichkeiten sicherlich verlieben.

Doch erstmal langsam – was ist eigentlich "Databinding"?

Jeder Entwickler kennt es: Im Code häuft man sich irgendwelche Daten an und versucht diese dann in das Frontend zu bekommen. Wenn nun der Nutzer die entsprechenden Felder im Frontend verändert, muss man ein händisches Mapping zwischen den UI Daten und den eigentlichen Daten vornehmen, damit die Änderungen auch gespeichert werden.

Das ist meist ein sehr mühseeliger Prozess, insbesondere da meist auch noch eine Validation gewünscht ist – darf in dem Feld jetzt ein String stehen? In dem Feld sollte nur eine Postleitzahl stehen etc.

Typische Szenarien – im Web ist dies durch das "zustandslose" HTTP schwierig umzusetzen – in ASP.NET wurde es versucht, allerdings meiner Meinung nach nur mit mäßigem Erfolg. In Windows (oder Silverlight) Applikationen sollte dies doch leichter möglich sein.

Genau darum dreht sich Databinding. Insbesondere in WPF gibt es einige Möglichkeiten und ich will hier nur mal den ersten Eindruck vermitteln.

Schritt 1: WPF Projekt anlegen

Als erstes legen wir ein WPF Projekt an:

image

Notiz am Rande: Das ganze kann man auch mit Expression Blend machen, allerdings werde ich mich hier erstmal nur auf Visual Studio 2008 konzentrieren.

Folgende Projektstruktur wird automatisch angelegt:

image

Wir halten uns vornehmlich in der "Window1.xaml" auf.

Schritt 2: Klassen anlegen

Damit wir in unserem Beispiel etwas machen können, benötigen wir 2 kleine Klassen:

"Person"

image

"Title"

image

Schritt 3: XAML Binding

Um das ganze Thema etwas zu verstehen, legen wir mal ein Binding direkt in der Window1.xaml an. So sieht das Ergebnis aus:

image

Und so der Code dazu:

image

Das sieht erstmal recht komplex aus – aber gehen wir Schritt für Schritt durch.

Wir wollen (in einem StackPanel) ein Label befüllen. Dazu befüllen wir es mit dem Binding Element. Über "Source" greifen wir auf eine "StaticResource" auf unser Element namens "MyTitleElement" zu.

Dabei holen wir uns den Wert des Feldes "Value" ab – was ich aber auch BlaBlub nennen hätte können.

Direkt im "Window.Resources" legen wir ein .NET Objekt der Klasse "Title" an (die wir im vorherigen Schritt angelegt haben) und geben ihm über x:Key einen Namen und über die Property "Value" (wie gesagt, hätte auch BlaBlub heißen können) das was wir rein haben wollen.

image

Der "Path" in dem Binding Element gibt am Ende die eigentliche Quelle an.

Damit wir im XAML solche .NET Objekte anlegen können, müssen wir einen xml Namespace hinzufügen. Über "clr-namespace:…" fügt man .NET Namespaces hinzu.

Um es nochmal hervorzuhebe: Das ganze ohne eine Zeile in der Codebehinde geschrieben zu haben.

Schritt 4: ListBox zur Anzeige von dynamischen Inhalten nehmen.

Um ein etwas komplexeres Beispiel zu zeigen, wollen wir nun mal mehrere "Person" Objekte in einer ListBox anzeigen.

So wird es hinterher aussehen:

image

Ich hatte jetzt keine große Lust mich erst mit der Formatierung rumzuschlagen ;) Primär gehts hier erstmal um Databinding. In einem anderen HowTo machen wir auch "schöne" Sachen.

Hier der Code dazu:

image

Wir legen wieder einen Namen an – damit wir im Codebehinde Zugriff darauf haben – und machen unser ItemTemplate – ein "DataTemplate".

Im Codebehinde reicht dann nur wenige Zeile:

image

Schlussbemerkung

Das ganze Thema Databinding ist natürlich noch um einiges Größer – doch vorerst mach ich hier erstmal Schluss. Das nächste HowTo wird sich dann um das richtige Databinding drehen – mit Dataupdates etc.

Natürlich könnt ihr auch in der MSDN oder hier nachschauen. Für jeden der sich interssiert, würde ich auch die Demos von der VSOne empfehlen.

PS: Ich arbeite mich selber erst in diese Themen ein, daher muss nicht unbedingt alles 100% stimmen. Es hilft mir zum Teil auch, dass ich dies mal aufgeschrieben habe. "Best Practices" sind es also (noch) nicht ;)

[ Download Democode ]

HowTo: WPF Spiegelung mit dem VisualBrush

Vor einige Zeit hatte ich ein Silverlight HowTo geschrieben, in dem es um den bekannten "Spiegeleffekt" ging.

Im Prinzip habe ich das "Hauptobjekt" geklont und entsprechend verändert, damit ein Spiegelungseffekt auftritt. Allerdings bietet WPF noch eine andere Möglichkeit (vielleicht sogar noch mehr…) und zwar über den "VisualBrush".

Wer noch nicht so bewandert mit WPF ist: Ein Brush repräsentiert den "Anstrich" eines Objektes. Es gibt verschiedene Brushs, aber dazu sollte man lieber die MSDN kontaktieren.

Schritt 1: Fangen wir mal langsam an: WPF Projekt & Bild suchen

Wir wollen eine einfache Spiegelung eines Bildes (im meinem Fall ein Windows Standardbild) in einer WPF Anwendung.

Dazu legen wir ein WPF Projekt an – ich mach dies in diesem Fall mit Expression Blend, theoretisch geht es natürlich auch in Visual Studio):

image

… und holen uns noch ein entsprechendes Bild:

image

Schritt 2: Das Spiegel vorbereiten

Am Anfang haben wir ein weiße Arbeitsfläche vor uns – diese wollen wir nun mit dem Bild befüllen:

image

In dem "Grid" wird noch ein "StackPanel" geschrieben, welches ein "Border"-Element mit einem "Image" beinhaltet.

Ergebnis:

image

Schritt 3: Das Bild duplizieren

Jetzt kommt das große Geheimnis – der Einsatz des VisualBrush:

image

Der rosa umrahmte Teil wird zur Spiegelung. Über die Background Property setzen wir den Visual Brush auf unser originales Bild. Das ganze kann man dem Themengebiet Databinding zuordnen.

Ergebnis:

image

Schritt 4: Das Bild spiegeln

Das tatsächliche spiegeln erreichen wir über ein "ScaleTransform":

image

Ergebnis:

image

Schritt 5: Durchsichtigkeit in der Spiegelung

Eine Spiegelung setzt immer eine gewisse "durchsichtigkeit" im Verlauf voraus – ansonsten hat man diesen Effekt nicht.
Dies ist über die "Opacity" Property & "Opacity" Mask möglich:

image

Ergebnis:

image

Fertig

Wenn man nun noch für den Hintergrund einen netten Farbverlauf einspielt, bekommt man sowas:

image

Das ganze könnt ihr natürlich ganz unten downloaden.

Quellen

Ich geb zu – in diesem Fall war ich wenig kreativ. Ich habe diesen Blogeintrag gefunden, welcher im Prinzip genau dasselbe macht. Ich hab einige Verlinkungen bei mir hinzugefügt und es einfach mal selber ausprobiert :)

In der MSDN gibt es auch noch ein anderes Beispiel, allerdings war mir dies zu komplex, zeigt aber, was der VisualBrush alles kann: How to: Create a Reflection

Wer über die Performance nachdenkt, insbesondere in 3D Anwendungen, sollte diese beiden Seiten durchlesen:

[ Download Democode ]

AIR "Apollo" vs. Flash vs. Silverlight "WPF/E" vs. WPF "Avalon" – WTF?

Heute hat Adobe sein AIR veröffentlicht. Um was geht es da eigentlich? Um es kurz auszudrücken: Flashinhalte / Applikationen können über AIR auch direkt als Desktopanwendung laufen.

Der Vorteil: Das Wissen der fleissigen Flasher und Designer kann direkt in AIR Anwendungen verwendet werden.

Der Grund für diesen Post ist der Spiegel Artikel. Hier wird auch kurz auf Silverlight eingegangen – allerdings ist meiner persönliche Meinung dabei: Silverlight mit AIR zu vergleichen, ist wie Äpfel mit Birnen.
Silverlight steht (momentan) zur direkten Konkurrenz zu Flash (also der “Browservariante” von Adobe). Etwas was (momentan) am ehsten mit AIR konkurrieren kann, gibt es (auf der Windows Plattform jedenfalls) bereits länger: Die Windows Presentation Foundation.
Nur halt um einiges mächtiger, schöner und mit einer ordentlichen Programmiersprache ( ;) ) als der Flashkram.

Wie bereits angedeutet, hat WPF natürlich den Haken, dass es nur auf Windows läuft. AIR momentan aber auch “nur” auf Windows und Mac.

Wenn man etwas drüber nachgrübelt, kommt man zu den Gedanken, dass Silverlight-Anwendungen (wenn Cross Plattform gewünscht ist) ohne Browser auskommen können oder das .NET Framework auf die anderen Plattformen portiert wird.

Nebenbei gibt es natürlich noch Java für Cross Plattform – jedenfalls wird die Zukunft wird interessant. Auch wenn ich hoffe, dass der Bastelkram aus dem Web (HTML, CSS, Flash) nun nicht unbedingt den Desktop erobert ;)

HowTo: WPF Glass Buttons erstellen – einfache Variante für große Schaltflächen

Eine kleine Sache, die ich heute auf der VSone gezeigt bekam, was Expressen Blend alles bietet – da kam unter anderem auch das Thema: Wie kann man Schaltfläche in diese “Glass” Optik, welche z.B. auch in Vista zu sehen ist, implementieren.

Software die dazu nötig ist: Expression Blend 1 oder Expression Blend 2 (aktuell ist die December Preview draußen) – ich verwende Expression Blend 2

Schritt 1: Projekt erstellen

image

Wir erstellen in Blend ein neues WPF Projekt an.

Schritt 2: Rechteck zeichnen

image

Das Rechteck ziehen wir irgendwo auf unser Windows.

Schritt 3: Gradient Brush auf Rechteck

Über die Properties legen wir ein Gradient Brush (Schwarz zu Weiß) auf das Rechteck an:

image

Schritt 4: Ecken abrunden

Als kleinen Zusatz, werden wir den Button rund gestalten, dafür einfach in Blend die gewünschte Rundung einstellen:

image

Schritt 5: Rechteck duplizieren & Kopie verkleinern

Das ganze kopieren wir nun und verkleinern es so, dass es im unteren Drittel zu sehen ist:

image

Schritt 6: Gradient Brush abändern

Den Gradient Brush werden wir nun von Schwar zu Weiß, nach Weiß nach Schwarz abändern:

image

Schritt 7: Umrandung entfernen

Für das kleine Rechteck müssen wir nun noch die Standardmäßige schwarze Umrandung entfernen:

image

Schritt 8: Alpha Kanal setzen & Feinarbeit

image

Den weißen Bereich sagen wir nun noch, dass er durchsichtig sein soll. Dann noch etwas vergrößern/verkleinern und etwas Feinarbeit und im Grund war es das:

Fertig:

image

Naja – ein Designpreis gewinnt es so sicherlich nicht, geht aber in die richtige Richtung ;) Wenn man noch ein wenig mit den Optionen rumspielt, vielleicht auch noch Schatten etc. reinbringt, wird es netter.
Vom Prinzip sollte das auch in anderen Grafikeditoren funktionieren.

[ Download Source ]

Wie man Spiegeleffekte erstellt hatte ich bereits hier erwähnt – allerdings hab ich mittlerweile gesehen, dass es im richtigen WPF (und nicht Silverlight) elegantere Möglichkeiten gibt.

VSone – Tag 1 – WPF, Sync Framwork, LINQ to SQL, ASP.NET, Parallel Extensions

Der erste Tag der VSone ist vorbei und ich werde einfach mal ein kurzes Review geben. Vom organisatorischen her, ist es bis jetzt sehr gut verlaufen. Im großen IMAX zu sitzen, kostenlos Popcorn zu bekommen und dabei auf der großen Leinwand eine WPF Entwicklung zu sehen, ist schon sehr cool – auch wenn das für Normalsterbliche sicherlich ein seltsamer Anblick ist ;)

Die Verpflegung ist spitze (und kostenlos) und die Leute sind allesamt recht nett, auch wenn ich teilweise den Altersdurchschnitt etwas senke (wobei Andere ihn wiederrum steigern).

Die Sprecher sind allesamt sehr nett und kann man auch mal leicht etwas über sein Kummer und Leid erzählen.

Nun kurz zu den Themen, die ich heute besucht hatte – es gab pro Track noch mehrere andere Vorträge parallel – interessierte sollten die Blogs von den Sprechern im Auge behalten:

Erstes Vortrag: XAML, WPF & Expression Blend

Ein sehr praktischer Vortrag von Markus Egger – wie frischt man eine einfache “UI” mit WPF auf. Ausführlich wurde dort Expression Blend vorgestellt, was ich zwar schon kannte, allerdings waren mir einige Funktionen noch nicht bekannt. Wie schnell man aus einer langweiligen UI eine schicke Anwendung bastelt (natürlich nur mit dem “Glass Effekt”, hat mich doch etwas angespornt, dort mehr Zeit zu investieren.
Eine andere Sache, die mir dabei ins Auge fiel: In Expression Blend gibt es eine coole “Commandsuche”, man konnte die Menüs ähnlich wie in Vista einfach so durchsuchen und es wurde jeweils das richtige angezeigt – bin mal gespannt, wann das in Office zu finden ist.

Nächster Vortrag: WPF Datenbindung

Ebenfalls sehr praxisbezogen – was versteht man unter Datenbindung, was kann diese und wie sieht das aus. Was spielen “Dependancy Properties” und was sind die “INotification…” Schnittstellen (z.B. INotifyPropertyChanged) – dies waren unter anderem Hauptthemen. Vorgetragen war dies von Christian Nagel. Zusammen mit dem ersten Vortrag, in dem es mehr um das Design ging, hat dieser Vortrag mich besonders als Entwickler begeistert – und wird sicherlich mal den ein oder anderen Blogpost Wert sein.

Nächster Vortrag: Microsoft Sync Framework

Das Microsoft Sync Framework ist noch nicht allzu alt, jedoch bereits in VS 2008 zu finden. In dem Vortrag von Alexander Duggleby ging es nur um dieses Thema. Mich persönlich hat dieses Thema doch recht interessiert und war auch gut vorgetragen. An praktischen Anwendungsfällen fehlt es mir momentan noch, vor allem da mir es noch nicht 100% klar war, wie man die einzelnen Provider (es gibt von MS einige wenige vorgefertige Provider, z.B. einen Fileprovider, um Files zu synchronisieren) einsetzt – aber man stelle sich folgendes vor: Ich lege Bilder in meinen “Eigene Bilder” Ordner und es wird auf mein Flickr, MySpace etc. Profil geladen – und wenn ich mich auf einen anderen Rechner einlogge, kann dies ebenfalls wieder syncronisiert werden. Theoretisch sollte dies gehen. Das wäre mal ein nettes Projekt ;)

Nächster Vortrag: Parallele Programmierung

Zum Anfang war ich hier recht skeptisch, weil viel Zeit mit “nicht .NET Themen” verging – jedoch ergab es hinterher ein sehr rundes Bild, vorgetragen von Bernd Marquardt. Es standen 3 Hauptthemen an – “OpenMP“, was für C++ oder Fortran gedacht ist, “SIMD“, welches ein anderes Modell fährt als “OpenMP” und “LINQ Parallel“, was direkt für C#/.NET momentan als CTP verfügbar ist.

Grundgedanke von “OpenMP”: Leicht mehrere Prozessoren nutzen. Bei einer Schleife von “0-999″ macht Prozessor 1 “0-499″ und Prozessor 2 “500-999″. Dies wurde recht anschaulich demonstriert und vor allen ist der gebrauch recht einfach.
Als zweites kam “SIMD”, was mehr auf die Hardware geht und Prozessoreigenschaften nutzt. Es werden Daten in einem Array in einem Schritt bearbeitet – anstatt einzeln. Das ist zwar auch schick, weil Threads nicht eingesetzt werden, ist aber noch mehr an die Prozessoren gebunden (und der Aufruf ist hässlich)  das geht beides nur in C++ (oder OpenMP in managed C++).
“Parallel LINQ” geht einen ähnlichen Weg wie “OpenMP”, allerdings zum Teil mit einem eigenen Syntax. Primär werden hier anonyme Methoden genutzt und wer Lamda Expressions verstanden hat, der kann hier einiges an Performance rausholen. Allerdings momentan alles alpha, aber das ist sicherlich in nächster Zeit ein sehr wichtiges Thema.

Nächster Vortrag: Was kommt nach ASP.NET?

Ein sehr humorvoller Vortrag von Hannes Preishuber. Auch wenn er versprochen hat, dass man nichts davon mitnimmt, hab ich doch die ein oder andere Sache aufgeschnappt. Mir waren die ASP.NET Futures, Silverlight, ASP.NET 3.5 Extensions usw. zwar schon ein begriff, allerdings hatte ich nie das Media Control ausprobiert oder Dynamic Data Pages ausprobiert (was sehr cool ist) und auch LINQ to SQL nutzt.

Letzter Vortrag für heute: LINQ to SQL

Christoph Wille stellt LINQ to SQL vor. Zwar hatte ich selber damit schon rumgespielt, allerdings war es interessant zu wissen, wo bestimmte Sachen “schwierig” umzusetzen sind oder schlicht und einfach langsam. Als generellen Tipp habe ich mitgenommen, den SQL Server Profiler laufen zu lassen, damit man sieht, was LINQ eigentlich am SQL Server veranstaltet. Den Blog von Scott Guthrie und Mike Toulty sollte man zudem ebenfalls besuchen. Morgen (oder heute wenn sie diesen Post lesen werden), wird das ADO.NET Entity Framework vorgestellt – und die Unterschiede zu LINQ to SQL ebenfalls dargestellt.
Einige Stichpunkte noch kurz am Rande erwähnt: Die Integration von Stored Procedures (gibt auf dem Blog von Scott und Mike noch wesentlich mehr Informationen), “CompiledQuerys” für performance Gewinn, das nachträgliche Laden von Kindelementen und die damit verbundenen Probleme (DataLoad Options erlaubt nur die nächste Ebene – man kann wohl keine 2 Ebenen übergehen – wenn man danach sucht, findet man was ich meine ;) ).

Zwischenfazit

Sehr schicke Veranstaltung.Ich werde in den nächsten Tagen/Wochen die Themen zum großen Teil aufgreifen.

Den Tag zwei werde ich sicherlich auch noch niederschreiben :)

HowTo: Windows Presentation Foundation (Einstieg, Infos, Programme, Überblick)

Da ich mich auch langsam der WPF Programmierung zuwende, möchte ich einfach mal einen Einstiegs-HowTo schreiben. Inhalte sollen hier das grobe Konzept hinter WPF sein, was man dafür braucht, welche Programme man nimmt und was man sich mal anschauen kann.

WPF? .NET 3.0? Um was gehts?

Die Windows Presentation Foundation ist Teil des .NET 3.0 Frameworks und wurde auch unter .NET 3.5 weiterentwickelt – was konkret, schauen wir uns dann später mal an. .NET 3.0 kam ungefähr mit Vista auf und ist für XP, Windows Server 2003 und Vista entwickelt wurden.

Um es mal grob zu sagen, was man mit WPF machen kann: Endlich schicke Windows Applikationen! Windows.Forms sind leider in Bezug auf Design recht zickig – mit WPF will man endlich “sexy” Applikationen auch im Unternehmensumfeld kultivieren. Das hat Teilweise schon zu Erfolgen geführt.

Silverlight nutzt als Basis auch WPF – allerdings momentan noch sehr begrenzt, aber das Konzept bleibt gleich.

Was ist denn das Konzept?

Stellen wir uns eine perfekte Welt vor, wo der Designer mit den entsprechenden Tools arbeitet und das Ergebnis direkt an den Entwickler übergeben kann und dieser ohne große Konvertierung oder Neuimplementierung das Design mit Funktionen befüllen kann. Wie gesagt, wir gehen von einer perfekten Welt aus ;)

Genau hier setzt WPF an. WPF ist die “Oberflächensprache”, welche direkt in .NET verwendet werden kann. Von den Designtools wird normalerweise eine XAML Datei für ein Layout erstellt – das gesamte Design wird also in XML gegossen.
XAML selbst wird in eine .NET Objekt Hierarchie serialisiert – daher kann der Entwickler in seiner gewohnten Umgebung direkt drauf zugreifen.

Ein nettes Whitepaper gibts auch hier zum Runterladen.

Mhh… klingt schon mal nach einer netten Idee – was gibts denn für Tools?

Bei Tools möchte ich mal eine Trennung zwischen “ist für Designer geeignet” und “ist eher für Entwickler geeignet”. Der Unterschied liegt daran, dass die Entwickler Anwendungen meist nur die “Handeingabe” ermöglichen – das gefällt natürlich keinem Designer ;)

  • Designer:
  • Entwickler:
    • XAMLPad: Das Ursprungstool von Microsoft. Dieses ist enthalten im Windows SDK.
    • XAMLPadX V3: Eine Erweiterung welche ich auf diesem Blog gefunden habe. Es unterstützt auch Plugins. Leider ohne IntelliSense momentan.
    • Visual Studio: VS 2008 bietet große Unterstützung – für Visual Studio 2005 gibt es ein AddIn, welches allerdings auch mehr schlecht als recht ist.
    • Kaxaml 1.0: Ein Geheimtipp wie ich finde. Sehr schick umgesetzt und sogar mit IntelliSense – daher aus meiner Sicht momentan besser als XAMLPad oder XAMLPADX V3.

Scheint doch eine nette Auswahl zu sein, gibt es sonst irgendwelche Probleme mit WPF?

WPF hat einen (meiner Meinung nach) großen Nachteil gegenüber einer klassischen Windows.Forms Applikation – leider fehlen viele Controls welche man gewohnt war. Andere Kritikpunkte, welche sicherlich erst bei einem näheren Blick auffallen, sind hier gut beschrieben. Performance ist durch die Komplexität insbesondere im 3D Bereich auch nicht so ganz leicht – hier einige Informationen über die Performance von WPF.

Microsoft arbeitet daran und hat auch wie hier ein offenes Ohr für Kritik.

Was gibt es für Demoapplikationen, Referenzen und sonstige Infos?

Microsoft selbst hat einige Demoapplikationen zum Downloaden angeboten: WPF Samples
Insbesondere möchte ich dieses PDF empfehlen – hier wird die Outlook 2003 Oberfläche mit WPF nachgebaut und man sieht Schritt für Schritt wie etwas gemacht wird.

Auch seit kurzem zum Download verfügbar: Das Syndicated Client Expericences Starter Kit Beta + MSDN Reader. Hierbei handelt es sich im Allgemeinen um einen schicken RSS Feedreader mit WPF.

Microsoft bietet auch einige Hands-on Labs an, welche lesenswert sind, sowie Expression Blend Tutorials und Videos.

Wer nach Tutorials sucht, wird ebenfalls auf vielen Seiten fündig – z.B. hier.

Aus der Blogszene kommt auch einige interessante Infos, z.B. aus dem deutschen Blogumfeld von Norbert Eder:

Es gibt noch viele weitere interessante Posts (unter anderem einige bei Norbert), z.B. ein WPF ICQ Client oder Vista Glass Effekt in WPF – ansonsten auch die anderen Blogs welche in diesem Post waren.

Lohnt sich WPF?

Diese Frage kann man so sehr schlecht beantworten – in der Windows Client Entwicklung ist WPF ein sehr großer Schritt nach vorn – auch wenn es momentan noch Schönheitsfehler hat. Mit Silverlight erobert WPF auch das Web, daher kann es nie verkehrt sein, sich mit dieser Technologie auseinander zu setzen. Microsoft setzt z.B. interen WPF für die Expression Produkte ein, aber auch für die Zune Software. Auch gibt es Komponenten in Vista mit WPF – in Windows “7″ wird gemunkelt, dass wohl mehrere Applikationen (Wordpad, Paint, Calc) mit WPF “neu” gemacht werden.

Ein Blick schadet also auf die WPF Entwicklung sicherlich nicht – daher auch dieser Post der als Einstieg dienen soll.

Next Generation User Interfaces – Interessante UI Konzepte und Formen

“Next Generation User Interfaces” klingt schonmal stark nach Bullshit Bingo – daher ist es als Titel schonmal sehr gut ;)

Durch die Wii wurde bereits ein gewaltiger Sprung erreicht – Microsofts Surface Tischlein geht ebenfalls in eine interessante Richtung. Die Kombination des Ganzen ist in etwa das “Minority Report-alike” UI – das Thema “User Interfaces” möchte ich heute etwas vertiefen und ein paar interessante Videos zeigen, was uns vielleicht in Zukunft erwartet wird.

Anfangen möchte ich mit einem eher weniger futuristischen Thema: Der normale Desktop eines PCs. Egal welches System – irgendwie sind alle ähnlich. Hier gab es die Idee, den realen Schreibtisch nachzuempfinden und mit Mausgesten zu steuern – das klingt erstmal langweilig, ist aber trotzdem sehr schön anzusehen:

Sieht doch schon schick aus, oder? Das ganze gibt es sogar als reales Programm!

Das sowas natürlich nicht die Spitze der Innovation ist, sollte auch jedem klar sein. Wie wäre es mit einem anderen Ansatz? Stellen wir uns doch mal unseren Desktop (oder Applikationen) nicht in grau und “steif” vor, sondern in einem schicken 3D Gewand oder mit netten Effekten. Auch wenn dies wenig “innovativ” scheint gibt es doch nach wie vor viel zu wenig “sexy” Programme. Microsoft (sicherlich gibt es Alternativen) mit WPF ein solches Werkzeug an. Was WPF alles kann, sieht man schön in diesem Video:

Oder man macht aus der Anwendung ein Cube:

Zugegeben: Alles bisher nette Spielerein die nett sind – aber es gibt ja noch mehr. Insbesondere in vergangener Zeit wurden Multitouch Screens immer wieder erwähnt – in Surface kommt sowas ebenfalls zum Einsatz.

Wie man sowas verwenden könnte, sieht man z.B. in diesem Video:

Sieht schick aus und ich denke, dass die eben genannten Sachen bald in den Massenmarkt Einzug (iPhone, Surface oder MacBook Air) halten – also Multitouch Screens und “sexy” Applikationen.

Eine etwas andere Art hat Microsoft vor einiger Zeit mal vorgestellt: Wie wäre es, wenn man die reale Welt und die virtuelle Welt miteinander verknüpft?

Eine längere Fassung gibt es hier zum Ansehen. Finde ich persönlich doch schon recht beeindruckend, auch wenn das Auto nur eine Projektion war.

Virtuelle Sachen “anfassbar” machen, hat auch ein anderer Hersteller versucht mit seinem so genannten “FogScreen”:

Solch ein FogScreen stell ich mir allerdings etwas unhandlich vor – daher gehen wir mal nun zum Non-Plus-Ultra über:

Holografische Screens wie bei Star Wars:

Welcher Nerd wünscht sich sowas nicht daheim? Das noch mit den anderen Sachen clever verknüpft und es wäre absolut “wow” \o/ ;)

Wie man sieht:

Konzeptionell gibt es bereits einige interessante Ideen – was tatsächlich umgesetzt wird und in der Realität angelangt, ist eine andere Sache – sicherlich hab ich auch noch viele Sachen vergessen. Unter User Interface würde auch sowas wie Sprachsteuerung etc. fallen – das fehlt hier allerdings.

Fazit: Spannendes erwartet uns :)

Minority Report User Interface mit WPF und der Wii

Jeder der Minority Report gesehen hat, wird sich so ein User Interface für Daheim wünschen – per Gesten witzige Sachen zu vollführen freute jeden, insbesondere die Nerds & Geeks.

Microsoft Surface ist dabei schon eine nette Sache – leider für Privatleute momentan (und wahrscheinlich in nächster Zeit) unerreichbar.

Johnny Chung Lee hat vor einige Zeit sein Wii Project der Öffentlichkeit gezeigt:

Das ist natürlich schon ziemlich cool – aber wie wäre es, wenn man das ganze noch mit einer WPF Applikation verknüpft?

Project Maestro” ist ein Prototyp welches mit WPF, Xaml, C# und der Wii Remote schon “fast” an Minority Report und den Surface Tisch rankommt (3D fehlt natürlich noch) :

Für alle interessierten: Connecting to the Wii Control with WPF

Mal sehn wann der erste sowas nach baut – ohne Touch Screen natürlich ;)

HowTo: WPF Windows mit dem Vista Glass Effekt ausstatten

Eine optische Verbesserung (jedenfalls für mich) stellt in Vista der so genannte Glass Effekt dar. Wer nun mit WPF arbeitet, wird vielleicht denken, dass solch ein Effekt direkt mit geliefert wird (immerhin ist .NET 3.0 in Vista fest integriert) – jedoch geht dies nicht so einfach.

Im Internet bin ich auf diesen Blogpost gestoßen – da das nicht schwierig aussah und auch schick war, ich aber nach einem simplen Beispiel suchte, habe ich mir schnell selber etwas zusammengetippt.

Hier das Ergebnis mal als Screenshot:

Ein Standard WPF Window:

image

Das Aero Window:

image

Was muss man dafür machen:

Wie in dem Blogartikel oben erwähnt, legt man folgende Klasse mit dem Source Code an:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Media;
using System.Windows;
using System.Windows.Interop;

namespace WPFAero
{
    public class GlassHelper
    {
        public static bool ExtendGlassFrame(Window window, Thickness margin)
        {
            if (!DwmIsCompositionEnabled())
                return false;

            IntPtr hwnd = new WindowInteropHelper(window).Handle;
            if (hwnd == IntPtr.Zero)
                throw new InvalidOperationException("The Window must be shown before extending glass.");

            // Set the background to transparent from both the WPF and Win32 perspectives
            window.Background = Brushes.Transparent;
            HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor = Colors.Transparent;

            MARGINS margins = new MARGINS(margin);
            DwmExtendFrameIntoClientArea(hwnd, ref margins);
            return true;
        }

        [DllImport("dwmapi.dll", PreserveSig = false)]
        static extern void DwmExtendFrameIntoClientArea(IntPtr hwnd, ref MARGINS margins);

        [DllImport("dwmapi.dll", PreserveSig = false)]
        static extern bool DwmIsCompositionEnabled();
    }

struct MARGINS
{
  public MARGINS(Thickness t)
  {
    Left = (int)t.Left;
    Right = (int)t.Right;
    Top = (int)t.Top;
    Bottom = (int)t.Bottom;
  }
  public int Left;
  public int Right;
  public int Top;
  public int Bottom;
}

}

Aero wird über die “dwmapi.dll” gebildet – am Ende ruft man eine einzelne statische Methode auf, welche man das Window übergibt.
Auf Codeproject habe ich dann noch eine andere Erweiterung dafür gefunden: Glass Effekt als Attached Property (Adding Glass Effect to WPF using Attached Properties)

Somit wäre es möglich, einem Window im Xaml direkt den Glass Effekt zuzuweisen:

<Window x:Class="GlassEffectDemo.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:src="clr-namespace: GlassEffectDemo"
    src:GlassEffect.IsEnabled="True"
    Title="GlassEffect demo" Height="300" Width="300">
    <Grid>
    </Grid>
</Window>  

Wichtiger Hinweis: Aero gibt es nur auf Vistabasis und auch nur bei aktivierem Aero (sollte klar sein)

Wäre interessant zu erfahren, ob es bei diesem aktivieren Aero zu irgendwelchen WPF Schwierigkeiten kommen kann – getestet habe ich es noch nicht ;)

Das Demoprojekt könnt ihr wie immer Downloaden – Visual Studio 2008 & Vista ist aber Voraussetzung.

[ Download Democode ]

Windows Vista Gadgets und einige Sicherheitsbedenken

Windows Vista Gadgets sind zwar teilweise nützlich und schön anzuschauen, trotzdem wundere ich mich, wie Microsoft mit dem Thema Sicherheit umgeht.

Die Vista Gadgets (.gadgets) sind eigentlich nur gezippte Datein:

  • HTML
  • Javascript
  • CSS

Als ich am Anfang davon hörte, war ich nicht gerade angetan, zwar konnte man auf bestimmte Systemeigenschaften zugreifen (Prozessorauslastung etc.), aber das bringt einen .NET Entwickler nicht gerade ins schwärmen und ich hab das Gadgetsthema erstmal zur Seite gelegt, bis ich irgendwann bei Coding4Fun auf den Blogpost gestoßen bin: Building a Windows Vista Email Gadget using the .NET Framework

.NET Framework und Gadgets? Wie passt das zusammen?

Die Gadgets erlauben nicht nur auf bestimmte Systemressourcen zuzugreifen, sondern es können auch ActiveX Komponenten eingebunden werden – oder halt das .NET Framework. Die Integration ist zwar mehr als Bescheiden (was mich darin bestärkt, dass die Gadgets nur ein schnelles Machwerk waren um den Trend mit abzufassen), aber es funktioniert.

Wie das obere Beispiel zeigt, kann man prima Outlook integrieren. Selbst das Microsoft Office Team baut ein Gadget um seine zuletzt angesehenen Dokumente anzeigen zu lassen.

Gadgets und die Möglichkeiten

Ich find Gadgets generell eine schöne Sache und bin eigentlich ein Fan solcher kleinen Minianwendungen, wie sie z.B. hier zum Runterladen angeboten werden, da sie wohl doch mehr Möglichkeiten bieten als mit Javascript möglich ist.
Zwar finde ich nie wirklich Platz für die Sidebar, aber das Konzept ist im Prinzip ganz gut.

Meine Sicherheitsbedenken

Doch genau diese Möglichkeiten haben mich stutzig gemacht – niemand erwartet doch von einem “Gadget” oder einer “Minianwendung”, dass sie auf alles zugreifen kann – jedenfalls war mein Verständnis bislang so, dass die Gadgets in einer Art Sandbox laufen, aber durch die Möglichkeit ActiveX anzusprechen und somit z.B. auch auf das .NET Framework zuzugreifen eröffnen sich einige gefährliche Sicherheitslöcher.

Ein kleines Szenario, welches ich mit Oli mal ausgemalt hatte:

Angenommen ein böser Hacker baut ein mehr oder weniger praktisches Gadget und schafft es, dass der Nutzer die Sicherheitswarnung (da kein Zertifiakt oder ähnliches vorhanden war) einfach ignoriert, dann hätte man prinzipell den vollen Zugriff auf das System. Jetzt könnten wir Anfangen aus Outlook alle Kontakte zu sammeln um fleissige Spam-Netze zu füttern oder wir durchsuchen die Mails (Outlook API olé ) nach “Passwort” oder “Kennwort” und schicken dies einfach an den bösen Hacker Server bzw. verschicken das Gadget weiter an alle Kontakte die wir gesammelt haben.
Das Gadget kann ja irgendeinen sinnvollen Zweck erfüllen – aber was im Hintergrund passiert weiß doch keiner direkt ;)

Wichtig: Dieses Szenario ist natürlich prinzipell bei jeder Anwendung so, aber da bei dem Wort “Gadget” oder “Minianwendung” kaum die Sicherheitsglocken läuten und die Installation per Klick geschieht ist die Hemmschwelle wesentlich niedriger!

Microsoft selbst weiß natürlich von diesen Sicherheitssachen und rät nur dazu, einige Dinge beim Entwickeln zu beachten.
Leider ist das Thema Gadgets wohl doch nicht mehr so aktuell bei Microsoft, den selbst der Blog ist seit Ende Juli verlassen.

Fazit

Gadgets sind interessant – aber gleichzeitig auch gefährlich, weil es eben nur “Gadgets” oder “Minianwendungen” sind und daher im Sicherheitsverständnis nicht auftauchen. Das Microsoft das Prinzip nicht weiter ausbaut, ist mir ein Rätsel.
Eine Hostanwendung, welche WPF & WCF Programme (generelle .NET Programme) leicht hosten kann und in einer gewissen Sandbox laufen würden wahrscheinlich mehr bringen.

Buchempfehlung: Programming WPF

Jeder der WPF, XAML und natürlich auch Silverlight verstehen möchte, lege ich dieses Buch ans Herz. Es beschreibt sehr genau, was mit WPF alles möglich ist und was man bei Silverlight vermisst.

Folgende Themen (und noch mehr), werden in diesem Buch behandelt:

  • ClickOnce Deployment
  • WPF Dependency Properties
  • WPF Panels – Stack, Dock, Grid, Canvas
  • WPF Layoutsystem
  • WPF Databinding
  • .NET und XAML – Was ist XAML?
  • WPF mit WinForms oder MFCs

Ich hab damals eine ältere Fassung gelesen, allerdings umschließt die neue nun auch noch das Thema 3D und Silverlight. Da aber bereits die erste Version mich überzeugt hat, kann ich ohne schlechtes Gewissen auch die neue Fassung empfehlen.

[AmazonLink]

WPF WallpaperGenerator

WPF ist cool!
Auf http://wallpaper.kalz.de gibt es eine Schicke WPF Anwednung zum Download mit der ihr eure Bilder in eine Collage für den Desktop verwandeln könnt.
Hier könnt ihr euch das Programm in action ansehen.