o-LIVE-r

Windows, Windows Phone, Silverlight, Internet Explorer, and the Cloud

  • o-LIVE-r

    Microsoft Pro Photo Tools 2

    • 0 Comments

    Über die Weihnachtstage hatte ich doch neben Plätzchen essen, Geschenke auspacken, Verwandte und Freunde besuchen und Wanderungen machen, doch tatsächlich noch zeit für mein Hobby --> Fotografieren. Und da bin ich auf ein nettes kostenfreies Tool von Microsoft gestoßen, das ich bisher auch noch nicht kannte.

    image

    Die Microsoft Pro Photo Tools ist ein Toolset an netten Photo-Features, wie z.B. das Hinzufügen von Geo-Tags zu Fotos. Dazu ist die UI sehr gut mit Virtual Earth kombiniert. Einfach die Bilder auf den Ort ziehen an dem sie geschossen wurden und schon ist man fertig.

    Einfach mal ausprobieren ...

    Download-Link: http://www.microsoft.com/prophoto/downloads/tools.aspx

  • o-LIVE-r

    Expression Media ... oder wie National Geographic Photograf Ira Block digitale Assets verwaltet

    • 0 Comments

    Zwischen den Jahren kommt man zu Dingen zu denen man sonst eigentlich nie kommt, oder? Richtig viel lesen zum Beispiel.

    Als Fan des NG fand ich den folgenden Artikel über Ira Block sehr interessant.

    Zum Artikel geht es hier entlang: http://www.microsoft.com/prophoto/expressionmedia2/articles/carpediem.aspx

  • o-LIVE-r

    No-Go-Liste der 25 gefährlichsten Programmierfehler

    • 0 Comments

    Die von einem Gremium weltweit bedeutsamer Software-Sicherheitsexperten unter Mitarbeit von Microsoft erarbeitete Liste der 25 für die Sicherheit einer Anwendung grundsätzlich schlimmsten Programmierfehler soll Entwickler informieren und wachrütteln. Unabhängig von Betriebssystemen und Entwicklungsumgebungen sind die typischsten Sicherheitsfehler in drei Kategorien aufgeteilt: Komponenteninteraktion, Ressourcenverwaltung und Sicherheitsvorkehrungen. Natürlich sind nicht nur die üblichen Fehler selber beschrieben, sondern sehr detailreich auch die Wege, mit denen sie vermieden werden können. Microsoft wurde in dem Gremium von Principal Security Program Manager Michael Howard vertreten, der auch Autor mehrerer maßgeblicher Security-Bücher und des Artikels „8 einfache Regeln zum Entwickeln von sichererem Code“ in der Novemberausgabe des MSDN Magazine ist. Richten Sie sich an diesen Maßstäben aus – schon Ihr nächster Kunde könnte Sie danach fragen. Oder noch besser, arbeiten Sie sich gleich von unserem Security Developer Center aus in Microsofts umfassende Security-Entwicklungsstrategie Microsoft Security Development Lifecycle (SDL) und deren auch für Sie verfügbare Tools ein.

  • o-LIVE-r

    Green-IT mal anders: Per Fahrgemeinschaft zur CeBIT nach Hannover

    • 0 Comments

    In Zusammenarbeit mit Deutschlands größtem Anbieter von Fahrgemeinschaften Mitfahrzentrale.de bietet Microsoft den Mitgliedern der Microsoft Developer Network (MSDN) Community einen umweltfreundlichen und kostengünstigen Mobilitätsservice an. Auf den Seiten der exklusiv für Microsoft eingerichteten „MSDN CeBIT '09 Mitfahrzentrale“ finden Software Entwickler eine Vielzahl von Fahrtmöglichkeiten nach Hannover. Diejenigen, die mit ihrem eigenen Fahrzeug zur Messe fahren, sind aufgefordert, ihre freien Plätze im Auto auf der Plattform anzubieten.

    Nach der kostenlosen Registrierung erhalten Sie freien Zugriff auf alle Inserate von und nach Hannover. Machen Sie jetzt mit!

    Ich buch dann mal :-)

  • o-LIVE-r

    Die neue deutsche Expression/Silverlight-Homepage ist online

    • 0 Comments

    Wooha! Es hat sehr viel länger gedauert als ursprünglich geplant, aber jetzt ist die aktualisierte deutsche Expression-Homepage endlich online. Das Design wurde nur minimal überarbeitet aber inhaltlich hat sich einiges geändert und es sind einige wichtige Punkte hinzugekommen, unter anderem:

    Die Website ist ab sofort unter der URL http://www.microsoft.de/expression online.

  • o-LIVE-r

    Kapitel aus Sascha Wolters Silverlight Trainings-DVD jetzt als MSDN Webcast verfügbar

    • 0 Comments

    Ende 2008 ist im Verlag "Video2Brain" das "Silverlight 2 Video Training" erschienen. Auf der DVD erklärt Sascha Wolter, wodurch sich die zweite Version von Silverlight auszeichnet, welche Werkzeuge notwendig sind und wie diese funktionieren. Angefangen von Microsoft Expression Blend bis hin zu Microsoft Visual Studio beleuchtet er alle Bausteine Schritt für Schritt anhand eines realen Projekts und garniert mit reichlich Praxiserfahrung. Zahlreiche Tipps rund um Rich Internet Applications komplettieren dieses Training für Designer und Developer. Bei MSDN Deutschland wird nun ab Freitag den 23.01.2009 der Beitrag „Steuerelemente“ aus dem Kapitel „Silverlight gestalten“ kostenlos als Webcast angeboten. Hier geht’s zum Webcast!

  • o-LIVE-r

    Webseminar zum Thema Online-Comics mit Expression Studio 2 & Silverlight am 19. und 24. Februar 09

    • 0 Comments

    Meiner einer und PC-Ware veranstalten gemeinsam im Februar ein Webseminar bzw. Webinar zum Thema „Wir lassen Comics leben“ mit Expression Design und Expression Blend. Die Teilnahme am einstündigen Webinar ist natürlich kostenlos. Das Webinar ist eine erstklassige Chance für alle Designer und Entwickler von Rich Internet Applications einen Einblick in die Möglichkeiten von Expression Studio und Silverlight zu erhalten. Die Schwerpunkte:

    • Erstellen der Figuren in Expression Design 2
    • Animation der Figuren in Expression Blend 2
    • Integration von Interaktionen und Daten mittels Visual Studio 2008

    Die Teilnahme ist kostenlos, eine Anmeldung ist notwendig:

    Anmeldung zum Webinar am 19. Februar 15.30 Uhr: http://www.pc-ware.com/pcw/de/de/events/registration.htm?selection=481

    Anmeldung zum Webinar am 24. Februar 15.30 Uhr: http://www.pc-ware.com/pcw/de/de/events/registration.htm?selection=482

  • o-LIVE-r

    Obama und Photosynth

    • 0 Comments

    Sehr cooles Photosynth.

    http://www.cnn.com/SPECIALS/2009/44.president/inauguration/themoment/

  • o-LIVE-r

    Frische Silverlight-Linktipps zu Mikrofon/Video-Zugriff, PopUps, Obama/Photosynth, Python, SharePoint und mehr

    • 0 Comments

    Kollege Steffen Ritter hat sich im Flieger gelangweilt und eine Liste frischer Linktipps zu Silverlight zusammengestellt, u.a. zum Einsatz von Micros/Webcams unter Silverlight, Silverlight-Programmierung mit Python, Businessanwendungen mit Silverlight entwickeln, SharePoint und Silverlight, Silverlight-SEO (Search Engine Optimization), Spieleprogrammierung in Silverlight und und und…
    Zu finden in seinem Blog unter http://blogs.msdn.com/steffenr/archive/2009/01/25/silverlight-ticker-mikrofon-video-zugriff-popups-obama-photosynth-python-sharepoint-und-mehr.aspx

  • o-LIVE-r

    Silverlight 2: Networking

    • 0 Comments

    Daten mittes WebClient-Klasse übertragen

    Der einfachste Weg Daten zu übertragen geht mit der WebClient-Klasse. Im Gegensatz zur WebClient-Klasse des großen .NET Frameworks umfasst sie nur asynchrone Aufrufe, damit der Benutzer nicht unnötig durch langlaufende Aufrufe warten muss.

    Die einfachste Methode ist die DownloadStringAsync-Methode zum Laden von beliebigen Text-Dateien. Aber Uploads und Streams lassen sich damit behandeln.

    Der folgende Code zeigt wie man Daten einer Url (z.B. http://blogs.msdn.com/olivers/rss.xml) laden kann. Falls einen die Crossdomain-Policy keinen Strich durch die Rechnung macht, siehe unten.

       1: string url = _address.Text;
       2: Uri uri = new Uri(url);
       3:  
       4: WebClient webclient = new WebClient();
       5: webclient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webclient_DownloadStringCompleted);
       6: webclient.DownloadStringAsync(uri);

    Wichtig, damit man mitbekommt, wenn die Daten zurückkommen ist das Event DownloadStringCompleted.

       1: void webclient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
       2: {
       3:     if (e.Error != null)
       4:     {
       5:         // Error
       6:         _resultText.Text = e.Error.Message;
       7:         return;
       8:     }
       9:  
      10:     string txt = e.Result;
      11:     _resultText.Text = txt;
      12: }

    Das Ergebnis, in diesem Fall ein String, befindet sich im Argument e, welches die Methode als Parameter mit übergeben bekommt.

    Daten mittels WebService übertragen

    Um Daten mit einem WebService auszutauschen, sind keine neuen Techniken notwendig. Es geht wie bisher sehr einfach über Visual Studio.

    Zu erst benötigt man einen WebService, den man in seinem Web in dem die Silverlight-Anwendung später gehostet wird, erstellt. Es muss tatsächlich die Webanwendung sein, in der die Silverlight-Anwendung liegt. Ist dies nicht der Fall kommt man mit der Crossdomain-Policy in Berührung. Dazu später mehr.

    Der eigentliche WebService ist sehr einfach:

       1: [WebService(Namespace = "http://tempuri.org/")]
       2: [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
       3: [System.ComponentModel.ToolboxItem(false)]
       4: // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
       5: // [System.Web.Script.Services.ScriptService]
       6: public class DemoWebService : System.Web.Services.WebService
       7: {
       8:  
       9:     [WebMethod]
      10:     public string HelloWorld()
      11:     {
      12:         return "Hallo Welt";
      13:     }
      14:  
      15:     [WebMethod]
      16:     public DateTime GetServerTime()
      17:     {
      18:         DateTime serverTime = DateTime.Now;
      19:         return serverTime;
      20:     }
      21:  
      22:     [WebMethod]
      23:     public int Add(int a, int b)
      24:     {
      25:         return a + b;
      26:     }
      27: }

    Diesen WebService muss man nun von seiner Silverlight-Anwendung referenzieren. Dies geht am leichtesten mit der rechten Maustaste auf dem Silverlight-Projekt:

    image

    Anschließend sucht man sich den WebService über den folgenden Dialog aus.

    image

    Visual Studio erzeugt nun im angegebenen Namespace (also mit using den entsprechenden Namespace einbinden), in meinem Fall “DemoServiceReference” alle benötigten Proxyklassen und Webservice aufrufe, die dann einfach im Code ansprechen kann.

       1: DemoWebServiceSoapClient soapClient =
       2:    new DemoWebServiceSoapClient();

    Prinzipiell lässt sich der Webservice-Proxy mit der obenstehenden Zeile erzeugen. Leider steht hart verdrahtet die Url auf meinen lokalen Webservice in der web.config. Das kann man beim produktiv setzen relativ einfach umstellen, ist aber beim Testen sehr mühsam.

    Ich verwende daher immer die folgende Methode zum Erstellen des Webservice:

       1: private DemoWebServiceSoapClient GetWebService()
       2: {
       3:     string url = HtmlPage.Document.DocumentUri.AbsoluteUri;
       4:     url = url.Substring(0, url.LastIndexOf("/") + 1);
       5:     url += "DemoWebService.asmx";
       6:  
       7:     BasicHttpBinding binding = new BasicHttpBinding();
       8:     EndpointAddress address = new EndpointAddress(url);
       9:  
      10:     DemoWebServiceSoapClient soapClient =
      11:         new DemoWebServiceSoapClient(binding, address);
      12:  
      13:     return soapClient;
      14: }

    In den Zeilen 3-5 erzeuge ich mir zur Laufzeit die Url zu meinem Webservice, den ich dann in Zeile 10 instanziere. Dazu muss ich dem Service mitteilen, welches Binding und welche Zieladresse mein Service hat.

    Diese Methode funktioniert natürlich auch nur dann, wenn der Service wirklich im Root-Verzeichnis der Anwendung steht und “DemoWebService.asmx” heißt ;)

    Um den Webservice-Aufruf anschließend durchzuführen ist der folgende Code notwendig:

       1: private void LoadServerTime()
       2: {
       3:     DemoWebServiceSoapClient soapClient =
       4:         GetWebService();
       5:  
       6:     soapClient.GetServerTimeCompleted 
       7:         += new EventHandler<GetServerTimeCompletedEventArgs>(soapClient_GetServerTimeCompleted);
       8:     soapClient.GetServerTimeAsync();
       9: }
      10:  
      11: void soapClient_GetServerTimeCompleted(object sender, GetServerTimeCompletedEventArgs e)
      12: {
      13:     if (e.Error == null)
      14:     {
      15:         DateTime serverTime = e.Result;
      16:         _serverTimeText.Text = serverTime.ToLongTimeString();
      17:     }
      18:     else
      19:     {
      20:         _serverTimeText.Text = e.Error.Message;
      21:     }
      22: }

    Dieses Codebeispiel lädt die Uhrzeit des Servers in den Client und zeigt diese dort an.

       1: private void AddValues()
       2: {
       3:     int value1 = int.Parse(_valueA.Text);
       4:     int value2 = int.Parse(_valueB.Text);
       5:  
       6:     DemoWebServiceSoapClient soapClient = GetWebService();
       7:     soapClient.AddCompleted += new EventHandler<AddCompletedEventArgs>(soapClient_AddCompleted);
       8:     soapClient.AddAsync(value1, value2);
       9: }
      10:  
      11: void soapClient_AddCompleted(object sender, AddCompletedEventArgs e)
      12: {
      13:     if (e.Error == null)
      14:     {
      15:         int result = e.Result;
      16:         _resultText.Text = result.ToString();
      17:     }
      18:     else
      19:     {
      20:         _resultText.Text = e.Error.Message;
      21:     }
      22: }

    Dieser Code ruft einen Webservice mit zwei Parametern auf und zeigt das Ergebnis ebenfalls an.

    Crossdomain und die Sicherheit

    Was sie vielleicht feststellen werden, ist das man über WebClient oder das Einbinden eines Webservices in Silverlight-Anwendungen (oder auch Flash-Anwendungen) nicht jeden beliebigen Inhalt von fremden Webseiten nachladen können. Solche sogenannten Cross-Domain-Calls werden von Silveright (und Flash) schlichtweg vorher geprüft und gegebenenfalls unterbunden. Um sorgenfrei eine externe Datei oder einen Webservice von einem anderen Server laden zu können müssten folgende Gegebenheit auf dem Fremdserver vorhanden sein:

    1. Eine Datei mit dem Namen crossdomain.xml

    2. In dieser Datei muss explizit jede (“*”) Domäne freigegeben sein, oder explizit die des Aufrufers.

    Leider ist dies in den seltensten Fällen der Fall. Es lohnt sich mal im Internet bei populären Tageszeitungen die Crossdomain.xml anzusehen. Kleiner Tipp: www.bild.de/crossdomain.xml und www.spiegel.de/crossdomain.xml sind zwei tolle Beispiele dafür.

    Mehr Informationen gibt es zur Crossdomain.xml hier.

    Um nun diesen Problemen aus dem Web zu gehen gibt es einen ganz einfachen Weg. Und zwar verwenden eigentlich (!!!) nur Client-Technologien im Browser diesen Mechanismus, den übrigens unser Wegbegleiter standardisiert hat, und dem wir mit Silverlight folgen.

    Dies alles trifft nicht zu, wenn man von einem Server oder einer Desktop-Anwendung auf diese Inhalt zugreift. Daher bauen wir uns eine kleine Brücke, und zwar einen ProxyService an unserem Server, der für uns die gewünschten Daten lädt und dann an unsere Silverlight-Seite durchreicht.

    Der Service könnte wie folgt aussehen:

       1: [WebService(Namespace = "http://tempuri.org/")]
       2: [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
       3: [System.ComponentModel.ToolboxItem(false)]
       4: // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
       5: // [System.Web.Script.Services.ScriptService]
       6: public class ProxyWebService : System.Web.Services.WebService
       7: {
       8:  
       9:     [WebMethod]
      10:     public string GetTextFromUrl(string url)
      11:     {
      12:         WebClient webclient = new WebClient();
      13:         string text = webclient.DownloadString(url);
      14:         return text;
      15:     }
      16: }

    Dieser Code fragt nun bei jeder Anfrage die bestimmte URL an und gibt die Textdatei an den Aufrufer zurück. Das ganze ist etwa ineffektiv wenn man die Anfrage sehr oft macht. Es würde sich hier definitiv lohnen einen Cache einzubauen, wenn man bestimmte Adressen häufiger aufruft.

    Dieser WebService wird nun ebenfalls in unserer Silverlight-Anwendung referenziert. Damit können wir nun Text-Daten von jeder beliebigen Seite laden.

       1: public ProxyCrossdomainSample()
       2: {
       3:     InitializeComponent();
       4:  
       5:     _address.Text = "http://blogs.msdn.com/olivers/rss.xml";
       6:     _loadButton.Click += new RoutedEventHandler(_loadButton_Click);
       7: }
       8:  
       9: void _loadButton_Click(object sender, RoutedEventArgs e)
      10: {
      11:     LoadDataFromProxyWebService();
      12: }
      13:  
      14: private void LoadDataFromProxyWebService()
      15: {
      16:     string url = HtmlPage.Document.DocumentUri.AbsoluteUri;
      17:     url = url.Substring(0, url.LastIndexOf("/") + 1);
      18:     url += "ProxyWebService.asmx";
      19:  
      20:     BasicHttpBinding binding = new BasicHttpBinding();
      21:     EndpointAddress address = new EndpointAddress(url);
      22:  
      23:     ProxyWebServiceSoapClient soapclient 
      24:         = new ProxyWebServiceSoapClient(binding, address);
      25:  
      26:     soapclient.GetTextFromUrlCompleted += new EventHandler<GetTextFromUrlCompletedEventArgs>(soapclient_GetTextFromUrlCompleted);
      27:     soapclient.GetTextFromUrlAsync(_address.Text);
      28: }
      29:  
      30: void soapclient_GetTextFromUrlCompleted(object sender, GetTextFromUrlCompletedEventArgs e)
      31: {
      32:     if (e.Error != null)
      33:     {
      34:         _resultText.Text = e.Error.Message;
      35:         return;
      36:     }
      37:  
      38:     string result = e.Result;
      39:     _resultText.Text = result;
      40: }

    Die vollständige Beispielanwendung gibt es hier:

  • o-LIVE-r

    Windows 7: Interessante (Neben-)Features

    • 0 Comments

    Seit einigen Tagen in ich nun begeisterter Windows 7 Nutzer. Natürlich gibt es unglaublich viel zu entdecken, die verbesserte UI, Aero Shake, Touch und noch vieles mehr.

    Allerdings sind mir auch einige nette Kleinigkeiten aufgefallen, die man erst beim genauen Hingucken bzw. Benutzen findet.

    Der Taschenrechner

    image

    Sehe ich das richtig? Ist es tatsächlich möglich? Nach all den Jahren? Endlich eine neue Oberfläche? Wow Nr. 1

    image

    Aber sieht man genau hin, dann erkennt man das der Taschenrechner jetzt noch mehr Ansichten hat als jemals zu vor (glaube ich zumindest) ;) Standard, Scientific, Programmer und Statistics.

    Die Programmer-Ansicht

    image

    Ja daran merkt man, wir sind eine Entwickler-Firma.

    Der Windows Live Messer ist zwar nicht Bestandteil von Windows 7, kann aber einfach über Windows Live installiert werden. Nach dem Starten ist er allerdings immer in der neuen Startleiste eingeblendet und verschwindet nicht diskret in die Traybar. Warum ist das so? Nun die Anwendung ist noch nicht ganz Windows 7 fit. Macht aber nichts. Mit einer kleinen Einstellung kann man jeder Anwendung sagen, verhalte dich so als seihst du auf Betriebssystem x oder y installiert.

    Über die Eigenschaften von des Programmes, z.B. Windows Live Messenger, kann dies sehr leicht konfiguriert werden.

    image

    Und siehe da? Der Messenger ist wieder verschwunden unten in der Traybar.

  • o-LIVE-r

    Silverlight 2: Controls für WPF und Silverlight in einer Bibliothek entwickeln

    • 0 Comments

    Eine der am häufigsten gestellten Fragen zu Silverlight ist: “Kann man Controls sowohl für Silverlight als auch für WPF gleichzeitig entwickeln”. Und die klare Antwort lautet: Ja, man kann.

    Dazu ist allerdings ein kleiner Trick notwendig. Man kann leider nicht die gleiche dll für WPF und Silverlight verwenden. Silverlight verwendet einen eigenen Compiler und kann auch keine “normalen” dlls aufnehmen die das .NET Framework mitbringt.

    Wie bekommt es nun hin das man Code und Controls, den man selbstverständlich nur einmal schreiben möchte, sowohl in WPF- und Silverlight-Anwendungen einbetten kann?

    Ganz einfach.

    1. Eine normale Windows Class Library / Klassenbibliothek erstellen.

    image

    In dieser fügt man nun die neuen Controls/Steuerelemente ein die man gerne für beide Zielplattformen (WPF und Silverlight) verwenden möchte. In meinem Fall sind das zwei Controls: LabeledTextBox und FeedbackControl. Das FeedbackControl beinhaltet wiederum drei mal die LabeledTextBox.

    2. WPF User Control erstellen

    image

    Sofort nach dem Visual Studio mir das neue Control (LabeledTextBox) erstellt hat, sehe ich mit schrecken, wie viele Usings überhaupt im Code sind.

    image

    Das Problem daran ist, das Silverlight den Namespace System.Windows.Navigation nicht kennt, aber denn brauchen wir sowieso nicht. Daher bitte alle nicht benötigten Usings rauswerfen mit folgenden Trick:

    image

    Ungeschlagen mein Favorit an kleinen Helfern in Visual Studio. Denn nachdem ich nun alle nicht benötigten Usings rausgeworfen habe, bleibt folgendes übrig.

    image

    Wow. Nur noch ein Namespace wird importiert.

    Der Code für meine LabeledTextBox sieht wie folgt aus:

       1: public partial class LabeledTextBox : UserControl
       2: {
       3:     public LabeledTextBox()
       4:     {
       5:         InitializeComponent();
       6:  
       7:         CheckText();
       8:         _value.TextChanged += new TextChangedEventHandler(_value_TextChanged);
       9:     }
      10:  
      11:     void _value_TextChanged(object sender, TextChangedEventArgs e)
      12:     {
      13:         CheckText();
      14:     }
      15:  
      16:     private void CheckText()
      17:     {
      18:         if (IsRequired && _value.Text.Length ==  0)
      19:         {
      20:             _warning.Visibility = System.Windows.Visibility.Visible;
      21:         }
      22:         else
      23:         {
      24:             _warning.Visibility = System.Windows.Visibility.Collapsed;
      25:         }
      26:     }
      27:  
      28:     private bool _isRequired = true;
      29:  
      30:     public bool IsRequired
      31:     {
      32:         get { return _isRequired; }
      33:         set { _isRequired = value; CheckText(); }
      34:     }
      35:  
      36:     public string LabelText
      37:     {
      38:         get { return _label.Text; }
      39:         set { _label.Text = value; }
      40:     }
      41:  
      42:     public string Text
      43:     {
      44:         get { return _value.Text; }
      45:         set { _value.Text = value; }
      46:     }
      47:  
      48:     public string Warning
      49:     {
      50:         get { return _warning.Text; }
      51:         set { _warning.Text = value; }
      52:     }
      53: }

    Das Design habe ich mit Expression Blend erstellt:

    image image

    3. Aufbau der Silverlight / WPF – MixedMode Projektstruktur

    image

    Um nun die WPF Controls in Silverlight integrieren zu können, legt man ein neues Silverlight Class Library Projekt an. (Oliver.Demos.Controls.Silverlight).

    Anschließend fügt man den gewünschten Code (XAML- + Codebehind-Datei) mittels hinzufügen eines bereits existieren Elements als LINK zum Projekt hinzu.

    image

    Dadurch kopiert man nicht den Sourcecode aus dem anderen Projekt, sondern erhält eine Referenz. Das bedeutet, das man den Code nur an einer Stelle pflegt und bei Änderungen nicht an allen referenzierten Stellen nachpflegen muss.

    4. Anlegen der Clients für WPF und Silverlight

    Der WPF Client erhält einen Referenz-Verweis auf das “normale” Class Library Projekt und der Silverlight Client einen Verweis auf die Silverlight-Variante mit den Referenzen.

    Wenn man dann die Solution kompiliert, stehen einem im Blend die neuen Controls zur Verfügung. Änderungen an der Haupt-Control-Bibliothek werden sofort dann in die WPF- und Silverlight-Clients übernommen

    Das Originalfeedback-Control in Blend

    image

    Das Control im WPF Projekt in Blend und im Browser

    image image

    Das gleiche Control in Silverlight in Blend und im Browser

    image  image

    Das vollständige Projekt gibt es hier zum Downloaden

  • o-LIVE-r

    TechTalk TV mit Silverlight ist jetzt online verfügbar

    • 0 Comments

    Vorgestern ist die TechTalk Tour zum Thema Silverlight zu ende gegangen, heute schon ist die Aufzeichnung aus Hamburg online gegangen.

    Also Popcorn und Cola kaufen und 3 Stunden Silverlight TechTalk schauen :-)

    Hier geht es zum Kino: http://www.microsoft.com/germany/msdn/techtalk/archiv/default.mspx#EJB

Page 1 of 1 (13 items)