Mix08 – Links zu Silverlight 2, ASP.NET MVC, Expression Blend…

Neben dem IE8 wurden heute folgende weitere Sachen zum Download oder Anschauen freigegeben:

ASP.NET MVC

Silverlight 2

Expression Studio

Anderes

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 ]

Wieder ein neues HowTo – Silverlight Bilder leicht drehen und Spiegeleffekte

Gestern gabs ja schon ein neues HowTo zum Thema Silverlight- Heute gibts schon das neue. Diesmal gehts mehr in Richtung des Designs – ohne Programmcode (das ist dann eine Sache für den nächsten Artikel). Es geht darum, Bilder leicht “3D mäßig” schräg gekippt mit Spiegeleffekten darzustellen.

Der Artikel (mit vielen Bildern) befindet sich an gewohnter Stelle oder hier der direkt Link.

HowTo: Microsoft Silverlight 1.0 (Bilder "kippen" samt Spiegeleffekte)

Gestern ging es ja um die ersten “dynamischen” Berührungspunkte mit Silverlight – das fetzt zwar ja – aber noch nicht richtig. Text zu spiegel ist natürlich klasse, aber was ist denn mit Bildern oder gar Videos? Da ich momentan keine Videos zur Verfügung habe, werde ich das einfach mal anhand eines Bildes machen.

Grundproblematik: Silverlight nutzt zwar Teile von WPF, aber eben nur Teile. Eine wichtige Funktionalität fehlt bislang vollkommen (traurigerweise) : 3D. Es gibt zwar “3D” Beispiele mit Silverlight (das Beispiel von Telerik), allerdings wenn man hinschaut, hat das nicht viel mit 3D zutun. Die Würfel werden nur verzerrt dargestellt, sodass es beinah aussieht wie 3D. Eigentlich müssten die Kanten nach hinten kürzer werden, bei dem Beispiel verändern sie sich aber kein Stück.

Es gibt noch eine kleine 3D Funktionalität, allerdings ist das eher schlecht als recht anzuprogrammieren. Auf Codeplex gibts eine 3D Engine namens Balder. Wer Interesse hat, sollte die mal anschauen, aber nicht zu viel erwarten.

Wir wollen am Ende sowas ähnliches (vom Effekt her – nicht die Funktionalität) wie dieser hier erreichen (der iTunes Silverlight Clone).

Schritt 1: Beliebiges Bild von Amazon holen

Ich glaub den Schritt brauch ich nicht weiter kommentieren – ich hab das Buchcover gewählt. Speichert es lokal auf eurer Festplatte – DragnDrop direkt ins Expression Blend ging bei mir nicht.

Schritt 2: Silverlight Projekt (es ist egal ob 1.0 oder 1.1 – ich mach es mit 1.0) in Expression Blend 2 August Preview erstellen

Müsste ebenfalls noch bekannt sein aus den vorherigen HowTos ;)

Schritt 3: Bild hinzufügen

image

Recht schwach ist noch das “Add Existing Item…” zu sehen – dort einfach das Bild hinzufügen und dannach kann man es per DragnDrop auf die Arbeitsfläche ziehen:

image

Schritt 4: Bild verzerren

Unter den “Properties” des Bildes findet man den Punkt “Transform”, dort einfach mal bei “Skew” mal klicken und in dem Y Wert -15 eintragen:

image

Da es meiner Meinung nach jetzt etwas zu “schräg”/”schief” aussieht hab ich die Sache bei “Rotate” noch ein Wert von 1,1 gegeben – muss aber nicht sein.

Schritt 5: Spiegeleffekt hinzufügen

Das gesamte Bild (was ich inzwischeneinfach verkleinert hab, weil es ansonsten nicht auf die Fläche passte) hab ich kopiert und einfach etwas nach unten gezogen. Damit das Spiegelbild erstellt wird, müssen folgende Einzelschritte erledigt werden:

Y-Achse kippen:

image

Verzerrung umstellen auf -15:

image

Damit die nun direkt aufeinander passen beim Spiegelbild das Rotate wieder auf 0 setzen und an das Original ansetzen:

image

Durchscheineffekt hinzufügen:

Der Anfangspunkt (die lange leiste unten mit dem schwarzen “Kästel”) war vorher direkt auf schwarz eingestellt, ich hab in dem Farbverlauf das auf fast weiß gesetzt undeinfach noch den AlphaKanal auf 41% gesetzt – ob das hinterher günstig ist, wird sich zeigen ;) – man kann den Wert aber auch auf 100% lassen. Selbst experimentieren ;)

image

Der Endpunkt wurde ebenso angesetzt nur dass er dort direkt auf 100% durchsichtig gesetzt wurde.

Die Verlaufsrichtung noch anpassen (auf das Pfeilsymbol klicken) :

image

Am Ende noch das etwas zurecht rücken und der Spiegeleffekt ist perfekt.

Schritt 6: Schatten beim Original hinzufügen

Um einen optischen Effekt noch hinzuzufügen, werd ich jetzt bei dem Originalbild noch ein leichten Schatten hinzufügen. Ich fands ganz schön ;)

Dafür legen wir ein Rectangle an dem Originalen an:

image

Hier muss jetzt leicht probiert werden – das Rectangle muss natürlich direkt an der Originalkante ran (d.h. etwas drehen) und ansonsten muss noch an der Größe rumgespielt werden. Der Farbverlauf muss angepasst werden und fertig.

image

Fertig: Ansicht im Browser

Direkt im Expression Blend können wir das nun testen – und das Ergebniss find ich erstmal recht ansprechend. Man kann es noch anpassen und insbesondere die Sache mit dem Setzen des Alphakanals macht mir jetzt Gedanken – aber für einen ersten Eindruck gehts und ist auch recht einfach.

image

Viel Spaß noch :)

HowTo: Microsoft Silverlight 1.0 (dynamische Spiegeleffekte)

In dem vorherigen HowTo (Microsoft Silverlight 1.0 (Spiegeleffekte erzeugen)) ging es grob darum, wie man mit Blend 2 arbeitet.
Heute kommt daher noch ein kleiner Abschnitt, der eigentlich noch mit in dem letzten HowTo mit reinkommen sollte: Wie dynamisiere ich das jetzt?

Schritt 1: Silverlight samt MS AJAX enabeld Projekt in Visual Studio erzeugen und den unsinnigen Kram rauswerfen

Wie ausführlich beschrieben hier beschrieben, erzeugen wir ein ASP.NET AJAX enabeld Project (oder eine Website) und laden die benötigten Komponenten rein:

- Silverlight.js (kommt direkt von MS und wurde von mir nicht angefasst)
- default.html.js (wurde durch das Projekttemplate aus dem vorherigen HowTo erstellt und dort angepasst) :

function createSilverlight()
{
var parentElement = document.getElementById('SilverlightPlugInHost');
    Silverlight.createObject(
        "Page.xaml",                  // Source property value.
        parentElement,                  // DOM reference to hosting DIV tag.
        "mySilverlightPlugin",         // Unique plug-in ID value.
        {                               // Per-instance properties.
            width:'300',                // Width of rectangular region of 
                                        // plug-in area in pixels.
            height:'300',               // Height of rectangular region of 
                                        // plug-in area in pixels.
            inplaceInstallPrompt:false, // Determines whether to display 
                                        // in-place install prompt if 
                                        // invalid version detected.
            background:'#D6D6D6',       // Background color of plug-in.
            isWindowless:'false',       // Determines whether to display plug-in 
                                        // in Windowless mode.
            framerate:'24',             // MaxFrameRate property value.
            version:'1.0'               // Silverlight version to use.
        },
        {
            onError:null,               // OnError property value -- 
                                        // event handler function name.
            onLoad:null                 // OnLoad property value -- 
                                        // event handler function name.
        },
        null);                          // Context value -- event handler function name.
}

- Page.xaml (siehe vorheriges HowTo mit dem “HelloWorld”)

und dann muss noch die Default.aspx angepasst werden:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="MS_AJAX_Silverlight._Default" %>    

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">    

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
    <script type="text/javascript" src="Silverlight.js"></script>
    <script type="text/javascript" src="Default.html.js"></script>
</head>
<body>    

   <div id="SilverlightPlugInHost">
      <script type="text/javascript">
         createSilverlight();
      </script>
   </div>    

    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
    <div>    

    </div>
    </form>
</body>
</html>

Am Ende hat man eine ASP.NET AJAX Projekt mit den benötigten Silverlight 1.0 Datein.

Schritt 2: Mit Javascript den Text verändern

In der Page.xaml müssen wir 2 Veränderungen vornehmen, damit wir per Javascript auf die Elemente zugreifen können. In den “Run” Elemente (wo der Text drin steht), müssen wir eine Art ID vergeben:

<Run x:Name="HelloWorld" FontSize="24" Foreground="#FFFFFFFF" Text="Hello World!"/>

Das x:Name Attribute muss noch an dem “gespiegelten” Run Element genauso dran – damit man später beide zugreifen kann. Das original nennt sich bei mir “HelloWorld” und das andere “HelloWorldMirror”.
Jetzt fügen wir ganz trocken noch ein Input Feld und einen Button unter das Div, in welches das Silverlight geladen wird:

<input type="text" id="textBox" /><button onclick="writeToSilverlight()">Klick</button>

Nun noch die Javascriptfunktion erstellen und dort auf die DOM des Silverlights zugreifen (die Silverlight DOM ist ähnlich wie die normale DOM – die eigenschaftsnamen der Elemente sind wie die im XAML (kann es aber nicht garantieren)) :

    <script language="javascript">
    function writeToSilverlight()
    {
           var silverlight = document.getElementById("mySilverlightPlugin");
            silverlight.content.findName("HelloWorld").Text = document.getElementById("textBox").value;
            silverlight.content.findName("HelloWorldMirror").Text = document.getElementById("textBox").value;
    }    

    </script>

Erklärung: Zuerst holen wir uns in eine “silverlight” Variable die DOM der ID und hinterher können wir auf diese recht bequem zugreifen. Die “findName” Methode nimmt dabei sehr viel ab – damit finden wirunsere beiden Texte wieder und können die wie in alter Javascript Manier setzen.

Achtung: Bei “document.getElementById(”mySilverlightPlugin”)” ist NICHT die ID des DIVs gemeint, in der wir es reingeladen haben. In der createSilverlight Funktion (siehe oben) legen wir eine “unique Plug-In ID” fest – diese ist hier gemeint und nur darüber kommen wir in das Silverlight rein.

image

Ein kleiner Tipp: Hier kann man sehen, dass man HTML Elemente und Silverlight Elemente gut mischen kann – auch einer Benutzung von Google Maps oder Virtual Earth steht dadurch nix im Wege – Silverlight kann “nebenher” laufen.

Schritt 3: Volle Kraft – MS AJAX und Silverlight

Damit das MS AJAX jetzt hier auch eine Verwendung findet, pimpen wir nun unsere Javascript Eingabe: Der Text geht an einen Webservice, welcher durch die AJAX Extensions eingebunden ist und geben die Ergebnisse dann letztendlich wieder als JSON in ein JS und das zeigt es im Silverlight an. Es soll eigentlich nur eine Inspiration sein, was man damit machen kann, vom Sinn her ists hier etwas mangelhaft ;)

Webservice erstellen und “ScriptService” Attribut über den Webservice schreiben:

image

namespace MS_AJAX_Silverlight
{
    /// <summary>
    /// Zusammenfassungsbeschreibung für HelloWorld
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    [ScriptService]
    public class HelloWorld : System.Web.Services.WebService
    {    

        [WebMethod]
        public string HelloWorldMethod(string name)
        {
            return "Hello World:" + name;
        }
    }
}

Das jetzt im ScriptManager auf der Default.aspx einbinden:

<asp:ScriptManager ID=”ScriptManager1″ runat=”server”>
    <Services>
        <asp:ServiceReference Path=”HelloWorld.asmx” />
    </Services>
</asp:ScriptManager>

… und am Ende unser Javascript Funktion neu basteln:

<script language=”javascript”>
function writeToSilverlight()
{
        MS_AJAX_Silverlight.HelloWorld.HelloWorldMethod(document.getElementById(”textBox”).value, onComplete);
}

function onComplete(result)
{
        var silverlight = document.getElementById(”mySilverlightPlugin”);
        silverlight.content.findName(”HelloWorld”).Text = result;
        silverlight.content.findName(”HelloWorldMirror”).Text = result;
}

</script>

Fertig – das Ergebnis ist das selbe, allerdings diesmal komplett mit Webservice. Toll, oder?

[Hier gehts direkt zum nächsten HowTo: Microsoft Silverlight 1.0 (Bilder "kippen" mit Spiegeleffekten)]

Neues HowTo: Silverlight 1.0 Spiegeleffekte

Nachdem eine kurze Pause hier eingekehrt ist, hab ich nun ein kleines neues HowTo. In diesem HowTo geht es um die Grundlagen von Expression Blend 2 (August Preview) und den berüchtigten Spiegeleffekten in Silverlight und wie man diese (erstmal statisch) erzeugt.

Hier zum Artikel.

HowTo: Microsoft Silverlight 1.0 (Spiegeleffekte erzeugen)

Heute geht es eher um das Expression Tool “Microsoft Blend 2 (August Preview)”. Gerne sieht man bei den tollen Silverlight Anwendungen Spiegeleffekt, aber wie erzeugt man diese? Hier in dem HowTo werde ich das kurz zeigen. Hier wird das “Hello World!” als Beispiel genutzt – die richtige Anwendung soll aber kreativer werden ;)

Schritt 1: Silverlight Projekt erstellen

Im Expression Blend 2 (August Preview) erstellen wir eine Silverlight 1.0 (mit Javascript) Anwendung.

image

Im Anschluss sieht man eine leere Seite.

Auf der linken Seite sieht man ein paar (wenige) Controls, z.B. das Canvas oder Text etc.. Auf der rechten Seite sieht man dann je nachdem was man anklickt die Eigenschaften des jeweiligen Objektes.

Es gibt auch die Möglichkeit direkt in den XAML Modus zu wechseln, sodass ihr euch anschauen könnt, was direkt im Markup sich verändert.

Schritt 2: Erste Begegnungen mit Expression Blend

Als erstes ändern wir die Hintergrundfarbe des gesamten Bildes von weiß zu schwarz, dazu gehen wir in die Eigenschaften des Canvas Objektes:

image

Auf der rechten Seite kann man nun unter dem Reiter “Properties” die Eigenschaften des Objektes direkt verändern:

image

Ändert hier nun die Farbe von weiß auf schwarz.

Schritt 3: “Hello World!” erstellen

Im Anschluss wird ein “TextBlock” erstellt – dieser befindet sich bei den Controls:

image

Damit nun ein “Hello World!” auf dem schwarzen Hintergrund erstellen und dannach die Textfarbe von schwarz auf weiß umstellen und die Schriftgröße unter “Text” ändern.

Schritt 4: Den Spiegeleffekt erstellen

Der Spiegeleffekt wird nur mittels eines kleinen Tricks erstellt – man muss den TextBlock komplett kopieren und die Kopie etwas nach unten ziehen.

image

Nun muss bei dieser Kopie noch der “Spiegeleffekt” eingestellt werden: Unter “Transform” bei den “Properties” auf “Flip” gehen und dort die Y-Achse “flippen”:

image

Schritt 5: Farbverlauf erstellen

Jetzt haben wir die Schrift zwar gespiegelt, aber irgendwie fetzt es noch nicht, daher muss noch ein Farbverlauf rein.

Das ist eigentlich jetzt der kniffligste Moment: Leider hat wohl das Tool eine Macke, wenn es darum geht, Farbverläufe auf Texte zu setzen. Man muss den Text markieren um den Farbverlauf einzustellen, kann dort aber nur einen horizontalen Farbverlauf bekommen:

image

Eigentlich gibts dann noch diesen kleinen Pfeil um die Richtung zu bestimmen:

image

Allerdings verschwindet dann wieder die Markierung – ärgerlich wie ich finde (oder es lag doch an mir). Das macht aber nix, denn obwohl das Tool die gespiegelte und mit farbverlaufversehenene Fassung anzeigt, bekommt man einen Fehler wenn man es ausführt. Grund ist (laut Errormessage), dass das TextElement eigentlich nix ausser den eigentlichen Text enthalten darf (-> scheinbar, ansonsten würde es ja gehen).

Nun müssen wir ins XAML:

Vorher -

image

Beachtet die Attribute “EndPoint” und “StartPoint”. Hier müsst ihr den Farbverlauf nun manuell einstellen, ich hab es auf so eingestellt: EndPoint=”1,1″ StartPoint=”1,0.2″. Damit erhält man einen leichten Farbverlauf nach unten. Nun müssen wir noch das TextElement “Run” leer machen-  die untere Variante hat bei mir geklappt. Den LinearGradientBrush hab ich einfach in den Textblock geschoben:

image

Endresultat:

image

(ich hab noch ein kleine Ellipse eingefügt – sah cool aus fand ich ;) )

Soviel erstmal dazu – heute ging es eher um Expression Blend – beim nächsten HowTo werde ich die Einbindung in unser ASP.NET AJAX Projekt zeigen und das ganze etwas dynamisieren ;)

Neues HowTo zu Silverlight 1.0

Wie bereits gestern erwähnt, hab ich eine neue HowTo Reihe zum Thema Silverlight angefangen.

Seit gestern sind die “Grundlagen” online – heute kommt der eigentlich erste praktische Einstieg zum Thema.

Am Ende des praktischen HowTos sollten die Grundlagen klar sein und man kann mit diesem Stand in Zusammenhang mit ASP.NETAJAX doch schon recht viel machen.