Silverlight 4 Controls

Aktueller Anlass ist ein Blog Posting, der wiederum einen Artikel in einer “Tageszeitung” zitiert. Folgender Inhalt verkürzt “Silverlight 4 hat 60 neue Controls”. Ohne das ich das wirklich weis, sagt mir mein Bauchgefühl das das nicht stimmen kann. Also zählen wir mal nach. In der Silverlight Core Installation ( das sind die Controls die bei der Installation des Browserplugin’s vorhanden sind) Button RepeatButton ToggleButton Checkbox Combobox ComboBoxItem ContentControl ContentPresenter Image InkPresenter ItemsControl ItemsPresenter Listbox ListBoxItem RadioButton Rectangle Ellipse Path Polygon PolyLine Line Progressbar TextBlock TextBox Glyphs Canvas Border Grid StackPanel MediaElement PopUp HyperlinkButton MultiScaleImage PasswordBox RichTextBox ScrollBar ScrollViewer Slider Thumb Tooltip ViewBox VirtualizingStackPanel WebBrowser Im SDK kommen folgende zusätzlichen Controls hinzu. Diese werden in das XAP Paket eingepackt. Datagrid viele SubControls Label AutoCompleteBox Calendar DatePicker Datapager Frame Page GridSplitter TabControl TabItem Treeview ValidationSummary ChildWindow Im Silverlight Toolkit (April Edition) kommen noch folgende Controls dazu DataForm DataField DataGridDropTarget Chart viele Chart unterControls Treemap DomainUpDown Rating RatingItem ButtonSpinner ListTimePickerPopUp RangeTimePickerPopup TimePicker TimeUpDown Accordion AccordionItem Theme viele Themes BusyIndicator DockPanel DragDecorator ListBoxDropTarget PanelDropTarget TreeViewDropTarget Expander Wrappanel GlobalCalender ContextMenu Dann noch aus dem RIA Bereich DomainDatasource   Manche davon sind eigentlich keine echten Controls sondern nur Sub Elemente von anderen Controls. Ein wenig Problematisch ist herauszufinden welche davon wriklich neu sind. Einige davon sind aus dem SDK nach Core gewandert andere vom Toolkit nach SDK. Darüberhinaus ist SDK nicht ganz synchron mit SL 4 und vomToolkit gibts bereits Version 7. Nachzählen lässt sich das somit kaum. Im Core Bereich sind wirklich neu zwei. Im SDK drei. Im Tookit eine ganze Reihe von ca- 10.

Silverlight 4 rechts [click]

Gerüchte sagen das Silverlight nur den Links Click [MouseleftButtonDown] kann weil eine MAC Maus ohnehin nur eine Taste hat. Plattformunabhängigkeit ist schon was Feines. Jedenfalls spendiert Microsoft nun Silverlight auch die rechte Maustaste. Man kann so einem speziellen Control, z.B. einer Textbox, ein Context Menü spendieren. Zusätzlich kann man auch das Silverlight Context Menü so unterbinden. Private Sub Ellipse1_MouseRightButtonUp(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) popupMenu.Visibility = Windows.Visibility.Visible End Sub Private Sub Canvas1_MouseRightButtonDown(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) 'UI Element um SL Kontextmenu abzuwürgen e.Handled = True End Sub Bevor nun alle loslaufen und anfangen Usercontrols zu bauen um eigene Context Menüs zu implementieren, es gibt eine gute Nachricht. Die nächste Version des Silverlight Toolkits, das mit den finalen SL 4 Bits erscheinen wird, besitzt das gleiche Context Menü wie WPF. Dazu werde ich die Tage noch einen Detail Artikel schreiben.

wie Silverlight sprechen lernte

Wissen Sie was COM oder gar CORBA ist? Uraltes Zeugs. Microsoft hat COM ( das Component Object Modell) vor langer Zeit für Windows erfunden um Fremdanwendungen leichter in eigene Programme einbinden zu können. Also z.B. Excel aus Word aufrufen. COM ist heute noch State of the Art. Selbst Silverlight 4 kann nun COM Objekte instanziieren oder laufende COM Server nutzen. Einzig Late Binding muss verwendet werden. Der größte Nachteil von Latebinding ist das man erst zur Laufzeit erfährt ob der Code auch funktioniert. Weder Compiler noch Intellisense können den Code prüfen. COM Automatisierung funktioniert nur bei elevated Trust und installierten Anwendungen also OOB ( out of browser). Die meisten Beispiele zeigen die Verwendung von Word oder Excel per COM. Das ist auch sicher naheliegend aber keine echte Herausforderung für mich. In meine Silverlight Kursen will ich ja schließlich mehr bieten als man in den Büchern liest. Dabei habe ich ganz tief im Betriebssystem nach COM Objekten gegraben und bin über die Speech API gestolpert. Ich habe schon vor vielen Jahren damit gearbeitet und es hat immer wunderbar funktioniert. Das Teil kann Sprachkommandos erkennen, Texterkennung durchführen und letztendlich auch geschriebenen Text vorlesen. Ich finde Microsoft hat schon oft klasse Technologie entwickelt,  die später dann von anderen aufgegriffen und erst richtig erfolgreich wurde. (XMLHTTP, Tablet PC, Speech, Smart Phone). Um Silverlight das sprechen auf Deutsch beizubringen braucht man noch ein paar Vorbereitungen. Out of The Box kann nahezu jedes Microsoft Betriebssytem von Microsoft bis Windows 7 Text vorlesen. Allerdings nur auf Englisch. Für unseren Test installieren wir den MS Reader 2.5 (Software um Bücher elektronisch zu lesen kommt mir auch irgendwie bekannt vor) aus dem Jahre 2002! und das deutsche Sprachpaket dazu. Dann findet sich in der Systemsteuerung unter Sprachen zwei neue Sprecher LH Stefan und LH Anna. Der Code in Silverlight ist da nur mehr ein Klacks. Um zu verhindern das die Anwendung im Online Modus einen Fehler wirft wird der eigentliche Code in eine IF Verzweigung gepackt. Mit der AutomationFactory lässt sich diese Prüfung durchführen oder ein Com Objekt erzeugen. Dann wird die Sprache ausgewählt und Lautstärke und Sprechgeschwindigkeit eingestellt. Per Speak spricht der Computer dann wirklich. If AutomationFactory.IsAvailable Then Dim co = AutomationFactory.CreateObject("SAPI.SpVoice") co.voice = co.GetVoices("Name=LH Stefan").Item(0) co.Volume = 100 '0-.100 co.Rate = -1 '-10 - +10 co.Speak("Hallo Welt, ich bin hannesp") End If Das ist eigentlich schon ziemlich cool. Aber es geht noch besser. Man kann die Ausgabe auch in eine Datei schreiben lassen statt den Text im Lautsprecher auszugeben. Das Format ist WAV. So eine WAV Datei kann dann jeder abspielen egal ob diese per Mail kommt oder im Browser ein Link steht. Dim co = AutomationFactory.CreateObject("SAPI.SpVoice") co.voice = co.GetVoices("Name=LH Stefan").Item(0) co.Volume = 100 '0-.100 co.Rate = -1 '-10 - +10 Dim fs = AutomationFactory.CreateObject("SAPI.SpFileStream") SpeechStreamFileMode.SSFMCreateForWrite=3 fs.Open("c:\test.wav", 3, False) co.AudioOutputStream = fs co.Speak("Hallo Welt, ich bin hannesp und arbeite für ppedv AG") fs.Close() Dank COM ist man auch nicht an die üblichen Grenzen des Dateizugriffes von Silverlight Anwendungen gebunden und kann an beliebige Stelle die WAV Datei speichern.

Silverlight OOB debuggen ohne Anwendung zu installieren

Silverlight 4 hat ja jede Menge wunderbware Features wenn man der Benutzer die Anwendung installiert und man  in den Out Of Browser Setting elevated Trust erzwingt. Folgende Funktionen stehen dann zur Verfügung Com Interop Browser Control aufhebung Cross Domain limitierungen Ziwschenablage Notification Toast Basic Clear Text Authentication auf Net Requests Drucken lokaler Datei Zugriff Aufhebung Fullscreen limitierungen Blöd wirds wenn man eine solche Anwendung debuggen muss. Jedes mal die Silverlight APP zu deinstallieren und wieder zu installieren ist eher langweilig. Es geht auch anders Das Silverlight Projekt per Rechtsclick als Startup definieren. [Set as Startup].  In den Projekt Eigenschaften  im Tab Debug – Out of Browser application aktivieren.

Visual Studio 2010 Intellisense

Aktuell bin ich auf den Microsoft BigDays in Österreich unterwegs und zeige neue Features in Visual Studio und .NET 4 die u.a. helfen die Produktivität zu steigern. Wer mich kennt, weis das ich großen Wert auf das Kosten Nutzen Verhältnis, Neudeutsch TCO, lege. Intellisense ist seit der Erfindung mein Freund und Helfer. In Visual Studio 2010 gibt es nun 2 Erweiterungen von Intellisense Pascal Notation Suche Wenn man die Grossbuchstaben einer Klasse tippt schlägt Intellisense die passende Klasse vor z.B. WC wird WebClient Volltext Suche Mit Tippen von STRG ALT [BLANK] schaltet Intellisense in eine Volltextsuche um. Man kann also auch nach “lient” suchen.   Intellisense Abschalten Manchmal ergänzt Intellisense Klassennamen falsch. Dann hilft STR [+] und kein Intellisense kommt mehr hoch. Die andere Seite der Medaille In XAML und damit WPF und Silverlight 4 funktioniert die neuen Funktionen von Intellisense nicht. Das ist wieder mal ein Indikator wie isoliert die Microsoft Developer arbeiten müssen. Abhilfe schafft eine Extension. Auch das eine Funktion von Visual Studio 2010. Diese wird installiert per Tools-Extension Mananger-Online Gallery. Suche XAML Intellisense. Installieren. Fertig. Das ganze sieht dann so aus. Wieder ganz anders aber immerhin.

Silverlight Handschrift eingabe

So ganz stimmt der Betreff nicht. Ich bin aktuell am “forschen”. Mein Ziel ist es User Interfaces zu bauen abseites von Menüs oben, OK und Cancel Button unten rechts. Dann habe ich mich wieder an Bill Gates alten Traum vom Tablet PC und Stift Eingabe erinnert. So ganz nebenbei ist Touch auch nicht alles. Z.b. kann man per Touch schlecht schreiben oder zeichnen. Schon gar nicht z.B. mit Handschuhen. Das erkennt manch IPhone Besitzer in der kalten Jahreszeit im Freien gerade. Da ich einen Tablet PC besitze (schon mein 4ter) ist es ganz leicht das umzusetzen. Schon seit Silverlight 1! gibt es das InkPresenter Steuerelement. Mein Beispiel soll eine Möglichkeit bieten am Bildschirm zu unterschreiben. Das Inkepresenter Control ist einfach wie es nur sein kann. Einzig drei Events muss man noch ancodieren <InkPresenter Name="inkp" Background="transparent" Width="800" Height="400" MouseLeftButtonDown="InkPresenterMouseDown" MouseMove="InkPresenterMouseMove" MouseLeftButtonUp="InkPresenterMouseUp"> </InkPresenter> Ich verpasse der geschrieben Linie (Stroke) noch eine Konturfarbe Gelb. Das sieht cool aus und liest sich auf wechselnden Untergrund wie z.B. ein Bild besser. Private Sub InkPresenterMouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) inkp.CaptureMouse() newStroke = New System.Windows.Ink.Stroke() newStroke.DrawingAttributes.OutlineColor = Colors.Yellow newStroke.StylusPoints.Add(e.StylusDevice.GetStylusPoints(inkp)) inkp.Strokes.Add(newStroke) End Sub Private Sub InkPresenterMouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseEventArgs) If Not IsNothing(newStroke) Then newStroke.StylusPoints.Add(e.StylusDevice.GetStylusPoints(inkp)) End If End Sub Private Sub InkPresenterMouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) newStroke = Nothing inkp.ReleaseMouseCapture() End Sub Das funktioniert von Silverlight 2 bis Silverlight 4 und auch mit normaler Maus! Noch ein Wort zum Tablet PC in meinen Schulungen nutze ich das sehr oft um Skizzen zu erstellen die ich meinen Kursteilnehmern dann auch gleich digital mitgeben kann.

Silverlight Fileopendialog und FileSaveDialog

Ich muss gestehen für die einfachsten Dinge des Lebens habe ich manchmal kein Stück vom Käsekuchen Source Code bei der Hand. Noch nie habe ich einen SaveFielDialog vernwedet der in Silverlight 3 vorhanden ist. Auf Benutzerinteraktion z.B. Button Click lässt sich ein solcher öffen. Anbei das Codeschnippsel Dim buffer As String Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Dim fo As New OpenFileDialog If fo.ShowDialog Then Dim fileStream As System.IO.Stream = fo.File.OpenRead Using reader As New System.IO.StreamReader(fileStream) buffer = reader.ReadToEnd End Using fileStream.Close() End If End Sub Private Sub Button_Click_1(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Dim fc As New SaveFileDialog If fc.ShowDialog Then Dim fileStream As System.IO.Stream = fc.OpenFile() Dim sw As New System.IO.StreamWriter(fileStream) sw.Write(buffer) sw.Flush() sw.Close() End If End Sub Auch dies eine Frage aus einer Silverlight Schulung von mir bei ppedv.

kleines Silverlight 3 Update 3.0.50160.0

Ich mach gerade die letzten Updates für meinen Silverlight Kurs nächste Woche in Karlsruhe. Brandaktuell neue Bits vom 20. Jan 2010. http://support.microsoft.com/kb/979202

Silverlight 4 COM Features

Ich habe mir eigentlich abgewöhnt diese das ist neu in Beta x Version Blog Postings zu schreiben. Keiner kümmert sich später um seine Beta Postings und wenn man im Web sucht findet immer wieder Code der nicht läuft, weil für andere Version geschrieben. Diese Zeit die ich dafür aufwende finde ich verschwendet. Vielleicht liegts auch am Alter. Egal. In diesem Fall möchte einen Hinweis Justin Angel setzen. Justin ist wirklich ein gracy guy. Er war bei Microsoft im Silverlight Team und hat MS verlassen weil im das wohl zu eng war. Seit Dezember ist er nun wieder frei unterwegs und hat eine Blog Engine auf Silverlight Basis geschrieben. http://justinangel.net/CuttingEdgeSilverlight4ComFeatures Der Link hier zeigt auf sein aktuellstes Posting rund um COM. Das Component Object Modell wurde vor Jahren mit .NET Tod gesagt. DIe Wahrheit ist, das Windows 7 mindestens zu 98% auf COM basiert und man heute nur mit C++ vernünftig COM programmieren kann. VB 6 konnte das auch, Gott hab es selig. Mit Silverligth 4 wird auf der Windows Plattform (und nur dort) eine COM Interface Einzug halten. Damit ist es möglich jede Security Grenze von Silverligth zu sprengen und SL aus der Sandbox zu heben. Z.B. direkter Filezugriff per Scripting.Filesystem Object. Man erinnert mich das an meine VB Zeiten. Upps! die sind ja noch gar nicht vorbei und so werde ich auf der VSone in meiner Silverlight 4 Session auf den Strichpunkt am Ende der Zeile verzichten. COM Zugriff wird sicher dabei sein.

Silverlight Streaming Beta 2 von irgendwas

Ich schreibe gerade für das Magazin Visual Studio One an einem Artikel zum Thema IIS7, Media und Silverlight. Das Thema hat mehr in und an sich wie man glauben möchte. Speziell wenn man Live Streaming realisieren möchte, benötigt der IIS zusätzliche Software. Das Silverlight Media Steuerelement unterstützt allerdings diese spezielle Streaming Methode, von Microsoft Smooth Streaming genannt, nicht. Dafür braucht man ein neues Silverlight Control das Smooth Streaming Media Element. Das Control findet sich im IIS Smooth Streaming Player Development Kit und dieses gibts ganz neu als Beta 2. http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=2b1ce605-3b99-49ad-8a26-1250f2acbbf6