How to Write Silverlight Design Time für alle Designer: Visual Studio 2008, Blend 2; Blend 3 und Visual Studio 2010
Einführung
Dies ist Teil der Serie über Design-Zeit die Umsetzung Änderungen in Silverlight Toolkit März 2009 Veröffentlichung . Dieser Beitrag konzentriert sich auf die aktuellen Änderungen in Designer erweiterbares Framework in Silverlight 3/Blend 3/Visual Studio 2010 eingeführt, und wie man Silverlight Design-Zeit zu entwickeln, um alle Designer-Unterstützung: Visual Studio 2008/Blend 2 und Visual Studio 2010/Blend 3.
Silverlight 2 Design Time for Visual Studio 2008 und Blend 2
Visual Studio und Blend teilen die gleichen Designer erweiterbares Framework, und verwenden Sie es für WPF und Silverlight. WPF-Designer-Erweiterbarkeit auf MSDN ist wahrscheinlich die beste Referenz für die Designer erweiterbares Framework. Der Dezember 2008 Veröffentlichung von Silverlight Toolkit basiert auf Silverlight 2 (aka SL2) ansässig und verfügt über Designer-Unterstützung für Visual Studio 2008 (aka VS9) und Blend 2. Es ist ein gutes Beispiel aus der Praxis zu demonstrieren, wie Silverlight 2 Design-Zeit Funktionen für VS9 entwickeln und Blend 2. My blog post Design Time Feature-Implementierung in Silverlight Toolkit erklärt im Detail, wie es gemacht wird, und die Umsetzung Rahmen-Leser können in ihrem eigenen Design-Zeit-Implementierung verwenden.
Zur Erinnerung, die Silverlight 2-Design zeitlichen Rahmen für Visual Studio 2008 und Blend 2 auf einen Blick:
- MWD: der Design-Zeit erweiterbares Framework wird durch eine Reihe von Versammlungen, vor allem Microsoft.Windows.Design.dll, Microsoft.Windows.Design.Extensibility.dll und Microsoft.Windows.Design.Interaction.dll ausgesetzt. Gemeinsam diesen Versammlungen werden als MWD. Sie werden unter% installiert DevEnvDir% \ PublicAssemblies (C: \ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ PublicAssemblies in 32bit OS oder C: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ PublicAssemblies in 64-Bit-OS). Sie sind auch GAC-ed. Die meisten Design-Zeit-Projekte brauchen, um diese MWD dlls Referenz. Visual Studio 2008 und Blend 2 verwenden MWD Version 3.5.
- Naming Convention: Visual Studio und Blend Last Entwurfszeit Baugruppen mit einer Namenskonvention: zur Kontrolle der Montage foo.dll, VS und Blend wird seine Design-Zeit-Baugruppen mit dem Namen Foo.Design.dll, Foo.VisualStudio.Design.dll zu finden, und Foo.Expression.Design.dll, in das gleiche Verzeichnis, wo foo.dll ist, oder die Design-Unterverzeichnis. Visual Studio lädt Foo.Design.dll und Foo.VisualStudio.Design.dll, während Blend-Foo.Design.dll und Foo.Expression.Design.dll Last wird. So ist es ratsam, Design-Zeit verfügt über alle Designer in. Design.dll gemeinsam stellen und legte Visual Studio und Blend spezifischen Design-Zeit Funktionen in. VisualStudio.Design.dll und. Expression.Design.dll jeweils.
- Entry Point: Wenn Visual Studio oder die Mischung lädt ein Design-Zeit der Montage, verwendet es Überlegungen, alle Klassen, die Umsetzung zu finden IRegisterMetadata , und fordert seine einzige Methode registrieren . Silverlight Toolkit Dezember 2008 Veröffentlichung hat ein Design-Zeit Umsetzungsrahmen in früheren Blog-Eintrag detaillierte Design Time Feature-Implementierung in Silverlight Toolkit .
Unten Screenshots Silverlight.Controls.Design.sln in Silverlight 2 Toolkit Quelle in März 2009 Veröffentlichung zeigt die Umsetzung von SL2 Design-Zeit für VS9 und Blend 2 oben diskutiert:
Was hat sich in Silverlight 3, Blend 3 und Visual Studio 2010
Wie in angegebenen WPF-Designer-Erweiterbarkeit Architektur auf MSDN:
Der WPF-Designer unterstützt die volle erweiterbares Framework. Expression Blend unterstützt nur Eigenschaft Editoren, Metadaten Laden und Lizenzierung. Mischung nicht unterstützt Menü Aktionen und Adorner.
Blend 2 verfügt über eine begrenzte Unterstützung für Silverlight Design-Zeit zu, aber Visual Studio 2008 hat wenig Unterstützung für Silverlight Design-Zeit (nur Icons, Metadaten Belastung für einige Attribute wie ToolboxBrowsableAttribute): es ist mehr ein Betrachter als ein Designer. Um WPF Parität für Silverlight Design-Zeit zu unterstützen, Blend 3 und Visual Studio 2010 (aka VS10) müssen wichtige Änderungen an den Designer erweiterbares Framework (dh MWD), vor allem kurz vorstellen:
- MWD: Die meisten Designer erweiterbares Framework API die gleichen bleiben, aber ihre physische Verpackung Änderungen: Microsoft.Windows.Design.dll ist weg, und die Version aller MWD Baugruppen Veränderungen von 3,5 bis 4,0. Bevor Visual Studio 2010 Beta1 ist der einzige Weg, um die neue MWD bekommen via Blend 3 Preview, und seine Version ist 3,7 statt 4,0 für heute:
- Entry Point: Statt nachzudenken über IRegisterMetadata Implementierungen, Blend 3 und Visual Studio 2010 verwenden Sie eine neue Assemblyattribut ProvideMetadataAttribute und die metadataProviderType umzusetzen IProvideAttributeTable müssen:

- Naming Convention: Aufgrund der aktuellen Änderungen wie MWD-Version und Einstiegspunkt, bestehende Design-Zeit-Baugruppen gegenüber 3,5 MWD entwickelt nicht in Blend 3 und Visual Studio 2010 wird geladen, haben Sie neue Design-Zeit gegen die neue 4.0 zu schreiben MWD für Blend 3 und Visual Studio 2010. Dies ist zwar OK für Blend (da kann man nur Blend 3 mit Silverlight 3 und Blend 2 mit Silverlight 2), schafft dies eine Herausforderung für Visual Studio, da Sie können Visual Studio 2008 für Silverlight 3 Entwicklung, sowie Visual Studio 2010 für Silverlight 2-Entwicklung.
Die untenstehende Tabelle listet alle unterstützten Szenarien und welche Version von MWD benutzt wird, um Design-Zeit Versammlungen zu laden:
| SL \ Designer | VS9 | VS10 | Blend2 | Blend3 |
| SL2 | MWD3.5 | MWD4.0 | MWD3.5 | |
| SL3 | MWD3.5 | MWD4.0 | MWD4.0 |
Wir können kein One-Design Zeitpunkt der Montage gegen zwei inkompatible MWDs, so müssen wir zwei separate Design-Zeit-Baugruppen, einer gegen jeden MWD erstellen. Design-Zeit-Baugruppen sind mit Namen geladen, und wir können nicht zwei Baugruppen mit dem gleichen Namen am gleichen Ort, so dass die Design-Zeit Montage Lademechanismus (dh die Namenskonvention) muss sich ändern, um mehrere Versionen des gleichen erlauben Entwurfszeit Montage koexistieren.
Während des Wartens auf die neue Namenskonvention zu kommen mit Blend 3 und Visual Studio 2010 RTM, können wir etwas clever nun sowohl VS9 und VS10 unterstützt. Denken Sie daran, aktuelle Namenskonvention ermöglicht Visual Studio und Blend jeweils zwei Design-Baugruppen zu laden:
| DLL \ Designer | Visual Studio | Mischung |
| Foo.Design.dll | X | X |
| Foo.VisualStudio.Design.dll | X | |
| Foo.Expression.Design.dll | X |
so können wir bauen die beiden Versammlungen gegen verschiedene Versionen von MWD:
- Für Silverlight 3 können wir die gemeinsam genutzt. Design.dll gegen MWD 4.0 Build, so kann es von beiden VS10 und Blend 3 geladen werden. Wir haben dann. VisualStudio.Design.dll gegen MWD 3.5 build und doppelte alles aus geteilt. Design.dll, so kann es durch VS9 geladen werden. Es gibt ein kleines Problem aber: wir haben keinen Ort, um Visual Studio spezifischen Design-Zeit Funktionen für VS10 gestellt, wie die Verwendung von ToolboxBrowsableAttribute (false), einige Steuerelemente aus der zunehmend überfüllten Visual Studio Toolbox zu verstecken, da VS10 nicht laden kann . VisualStudio.Design.dll gegen MWD 3.5 build. Dies wird mit der neuen Namensgebung einmal Visual Studio 2010 RTM behoben werden.
| DLL \ MWD \ Designer | MWD | VS9 | VS10 | Blend3 |
| Foo.Design.dll | 4,0 | X | X | |
| Foo.VisualStudio.Design.dll | 3,5 | X | ? | |
| Foo.Expression.Design.dll | 4,0 | X |
- Für Silverlight 2, folgen den gleichen Ansatz: die gemeinsame Design.dll gegen MWD 4.0 build, haben aber beide VisualStudio.Design.dll und Expression.Design.dll bauen gegen MWD 3,5 und doppelte alles in gemeinsamen Design.dll.... . Auf diese Weise werden sowohl VS9 und Blend 2 gut funktionieren, aber mit dem gleichen Problem, dass es keinen Ort, um Visual Studio Besonderheiten für VS10 setzen. Auch hier wird, dass mit der neuen Namensgebung in VS10 gelöst werden.
| DLL \ MWD \ Designer | MWD | VS9 | VS10 | Blend2 |
| Foo.Design.dll | 4,0 | X | X | |
| Foo.VisualStudio.Design.dll | 3,5 | X | ? | |
| Foo.Expression.Design.dll | 3,5 | X |
Design Time Feature-Implementierung in Silverlight 3 Toolkit
MWD
Die Design-Projekten in Silverlight 3 Toolkit in März 2009 Veröffentlichung folgte oben genannten Schema sowohl Visual Studio 2008 und Visual Studio 2010 sowie Blend 3 unterstützt.
Laden Sie die März 2009 Veröffentlichung , entpacken Sie den Quellcode, laden Silverlight.Controls.Design.sln in Visual Studio 2008. Verwenden Sie die einfachere Control.Input.Design Projekt als Beispiel:
- Design-Projekte für VS9/Blend3 müssen die neuen 4.0 MWD Referenz. Hier verwenden wir Präbuildereignis zu CopySystemWindows.bat aufrufen, um Blend 3 lokalisieren und kopieren Sie die beiden MWD dlls zu Binaries-Verzeichnis.
- Bitte beachten Sie die kleine Änderungen an CopySystemWindows.bat file: wir brauchen, um Zitat "% THIS_DIR% \ Binaries \ Blend3" (Linien in gelb) auf die Fälle, wo es einen Raum, in dem Pfad zu dem Verzeichnis der Quellcode entpackt, um sich behandeln.
Wenn Sie nicht wie die fragile CopySystemWindows.bat Datei oder mit Build-Ereignisse können Sie Verweispfade um Visual Studio zu finden, wo die neue MWD ist, wie unten gezeigt. Die einzige Einschränkung ist, dass Sie brauchen, geben Sie beide% programfiles% und% ProgramFiles (x86)%, damit es auf beiden x86-und x64-Maschinen zu bauen.
. Der Verweis Wege-Einstellung wird in den csproj.user Datei fort:
<Projekt xmlns = " http://schemas.microsoft.com/developer/msbuild/2003 " >
<PropertyGroup>
<ReferencePath> C: \ Program Files \ Microsoft Expression \ Blend 3 Preview \ c: \ Program Files (x86) \ Microsoft Expression \ Blend 3 Preview \ </ ReferencePath>
</ PropertyGroup>
</ Project>
Metadata.cs
Ich benutze den gleichen Umsetzung Rahmen wie in Design Time Feature-Implementierung in Silverlight Toolkit , mit einigen kleinen Änderungen:
- Ich zog links auf gemeinsame Dateien Extensions.cs und MetadataBase.cs aus Controls.Design.Common Ordner unter eine Lösung Ordner mit dem gleichen Namen;
- .. Metadata.cs in Design und Expression.Design Projekte verwenden die neue Anlaufstelle: use ProvideMetadata Assemblyattribut und implementieren IProvideAttributeTable-Schnittstelle;
- add beachten Sie, dass alles in addAttributes ()-Methode muss in entsprechenden. VisualStudio.Design Projekt dupliziert werden.
. Die VisualStudio.Design Projekte immer noch den alten IRegisterMetadata Schnittstelle in MWD 3,5, aber:
- unter Controls.Design Ordner befinden sich Links zu allen * Metadata.cs Dateien in entsprechenden Design-Projekt.;
- AddAttributes ()-Methode dupliziert den Inhalt von addAttributes ()-Methode in entsprechende. Design-Projekt.
Abschluss
Während die aktuellen Änderungen in MWD einige Unannehmlichkeiten verursachen kann, ist es notwendig, so reich ein Design Erfahrung für Silverlight für WPF zu implementieren. Dieser Beitrag beschreibt eine Möglichkeit, die aktuellen Änderungen Griff und immer noch die Unterstützung aller bestehenden Designer: Visual Studio 2008, Blend 2 und Blend 3. Wenn Visual Studio 2010 öffentlich zugänglich ist, werde ich über die neue Namensgebung Blog, und wie Toolkit Entwurfszeit in Visual Studio 2010. Stay tuned!
2009.12.05: Update für VS2010 Beta2
Zur Lösung obigen Problems unterstützen sowohl Visual Studio 2008/Blend2 und Visual Studio 2010/Blend3, die inkompatible Versionen von MWDs (v3.5 vs. V4.0) verwenden, wird die Namenskonvention für Design-Zeit Baugruppen aus VS2010 Beta2 verbessert und Blend 3:
für eine Runtime-Assembly foo.dll, das gemeinsame Design-Zeit Assembly mit dem Namen ist Foo.Design *. dll, ist die Visual Studio spezifischen Design-Zeit Assembly mit dem Namen Foo.VisualStudio.Design *. dll, und die Mischung spezifischen Design-Zeit Baugruppe ist mit dem Namen Foo . Expression.Design *. dll, wobei * Null oder mehr gültige Zeichen für Dateinamen werden können. Wenn ein Designer (wie Visual Studio oder Blend) zu einem Design-Zeit Assembly zu laden und mehrere fit die Namensgebung versucht, wird Null oder Eins geladen werden:
- Wenn die MWD-Version von der Design-Time-Montage verwiesen hat einen anderen Major-Versionsnummer als die Designer-MWD-Version, dann ist die Design-Time-Montage wird nicht geladen und wird umgangen.
- Wenn mehr als ein Design-Time-Montage ist kompatibel mit dem Designer-MWD-Version, lädt das Designer das eine gegen das höchste MWD-Version, die weniger als oder gleich dem Designer MWD-Version kompiliert wird.
Silverlight 3 SDK DDR 2 (auch von VS2010 automatisch installiert) und Silverlight 3 Toolkit Oktober 2009 Veröffentlichung mit der neuen Namensgebung für beide VS2008 und VS2010-Unterstützung. Nehmen System.Windows.Controls.dll zum Beispiel ist System.Windows.Controls.VisualStudio.Design.dll gegen MWD 3,5 gebaut und ist von VS2008, die die alte Namenskonvention verwendet verwendet, eine neue System.Windows.Controls.Toolkit. VisualStudio.Design.4.0.dll gegen MWD 4.0 integriert ist für VS2010, die die neue Namensgebung versteht aufgenommen. Bitte beachten Sie Silverlight Design Time Assemblies für weitere Informationen.










Recent Comments