; Blend 3 und Visual Studio 2010 Visual Studio 2008, Blend 2: Wie man Silverlight Design Time für alle Designer schreiben
Einführung
Dies ist Teil der Reihe über gestalterische Umsetzung Zeit Änderungen in Silverlight Toolkit März 2009 Veröffentlichung . Dieser Beitrag konzentriert sich auf die wichtigen Änderungen in Designer-Erweiterbarkeit Framework in Silverlight 3/Blend 3/Visual Studio 2010 eingeführt, und wie man Silverlight Design-Zeit zu entwickeln, um alle Designer zu unterstützen: Visual Studio 2008/Blend 2 und Visual Studio 2010/Blend 3.
Silverlight 2 Design-Time für Visual Studio 2008 und Blend 2
Visual Studio und Blend teilen sich die gleiche Designer-Erweiterbarkeit Rahmen, und verwenden Sie es für beide WPF und Silverlight. WPF-Designer-Erweiterbarkeit auf MSDN ist wahrscheinlich die beste Referenz für das Designer-Erweiterbarkeit Rahmen. Der Dezember 2008 Veröffentlichung der 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 in die demonstrieren, wie Silverlight 2-Design-Zeit-Funktionen für VS9 und Blend 2 zu entwickeln. Meine 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-Zeit Rahmen für Visual Studio 2008 und Blend 2 auf den Punkt:
- MWD: die Design-Zeit erweiterbares Framework wird durch einen Satz von Assemblys, vor allem Microsoft.Windows.Design.dll, Microsoft.Windows.Design.Extensibility.dll, und Microsoft.Windows.Design.Interaction.dll ausgesetzt. Gemeinsam diese Assemblys werden als MWD. Sie werden unter% DevEnvDir% installiert \ 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 Projekte Design-Zeit brauchen, um diese MWD-DLLs zu verweisen. Visual Studio 2008 und Blend 2 Verwendung MWD Version 3.5.
- Namenskonvention: Visual Studio und Blend Last Entwurfszeit Baugruppen mit einer Namenskonvention: zur Kontrolle der Montage Foo.dll wird VS und Blend finden ihre Design-Zeit-Baugruppen mit dem Namen Foo.Design.dll, Foo.VisualStudio.Design.dll, und Foo.Expression.Design.dll, im gleichen Verzeichnis, in dem Foo.dll ist, oder die Design-Unterverzeichnis. Visual Studio lädt Foo.Design.dll und Foo.VisualStudio.Design.dll, während Blend-und Foo.Design.dll Foo.Expression.Design.dll geladen werden. So ist es ratsam, Design-Zeit setzen über alle Funktionen zugreifen Designer in. Design.dll und legte Visual Studio und Blend-spezifischen Design-Zeit-Funktionen in. Und VisualStudio.Design.dll. Expression.Design.dll sind.
- Entry Point: wenn Visual Studio oder Blend-Design lädt eine Zeit der Montage, verwendet es Reflexion, alle Klassen, die Umsetzung zu finden IRegisterMetadata , und nennt seine Methode nur registrieren . Silverlight-Toolkit Dezember 2008 Veröffentlichung hat einen Design-Zeit Umsetzungsrahmen in früheren Blog-Eintrag detailliert Design Time Feature-Implementierung in Silverlight-Toolkit .
Im Folgenden Screenshots von Silverlight.Controls.Design.sln in Silverlight 2 Toolkit Quelle im März 2009 Veröffentlichung demonstriert Umsetzung der Design-Zeit für SL2 VS9 und Blend 2 oben besprochen:
Was sich geändert hat in Silverlight 3, Blend 3 und Visual Studio 2010
Wie in den angegebenen WPF-Designer-Erweiterbarkeit Architektur auf MSDN:
Der WPF-Designer unterstützt die volle Erweiterbarkeit Framework. Expression Blend unterstützt nur Eigenschaft Editoren, Metadaten Belastung und Lizenzierung. Mischung nicht unterstützt Menü Aktionen und Adorner.
Blend 2 verfügt über eine begrenzte Unterstützung für Silverlight-Design-Zeit auch, 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 Unterstützung, Blend 3 und Visual Studio 2010 (aka VS10) haben müssen, grundlegende Änderungen an den Designer erweiterbares Framework (dh MWD) einführen, insbesondere:
- MWD: die meisten der Designer erweiterbares Framework API die gleichen bleiben, aber ihre körperlichen Veränderungen Verpackung: Microsoft.Windows.Design.dll ist weg, und die Version aller Baugruppen MWD Veränderungen von 3,5 bis 4,0. Vor dem Visual Studio 2010 Beta 1, ist der einzige Weg, um die neue MWD bekommen via Blend 3 Preview, und seine Version ist 3,7 statt 4,0 für jetzt:
- Entry Point: Statt nachzudenken über IRegisterMetadata Implementierungen, Blend 3 und Visual Studio 2010 verwenden Sie eine neue Assemblyattribut ProvideMetadataAttribute, und die metadataProviderType IProvideAttributeTable implementieren müssen:

- Namenskonvention: wegen der wichtigen Änderungen wie MWD-Version und Anlaufstelle, die bestehenden Design-Zeit-Baugruppen gegenüber 3,5 MWD entwickelt werden nicht in Blend 3 und Visual Studio 2010 zu laden, müssen Sie neue Design-Zeit gegen die neue 4.0 für Blend 3 MWD und schreiben Visual Studio 2010. Dies ist zwar OK für Blend (da können Sie 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 dient zur 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 nicht bauen ein Design-Zeit der Montage gegen zwei inkompatible MWDs, also müssen wir zwei getrennte Baugruppen Design-Zeit, einer gegen jeden MWD erstellen. Design-Zeit-Baugruppen werden mit ihrem Namen beladen, 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 Gescheites jetzt tun, um sowohl VS9 und VS10 unterstützen. Denken Sie daran, aktuelle Namenskonvention ermöglicht Visual Studio und Blend jeweils zwei Design-Baugruppen zu laden:
| DLL \ Designer | Visual Studio | Mischen |
| Foo.Design.dll | X | X |
| Foo.VisualStudio.Design.dll | X | |
| Foo.Expression.Design.dll | X |
so können wir bauen die beiden Baugruppen gegen verschiedene Versionen von MWD:
- Für Silverlight 3, können wir das gemeinsam. Design.dll gegen MWD 4,0 bauen, so kann es sowohl von VS10 und Blend 3 geladen werden. Wir haben dann. VisualStudio.Design.dll gegen MWD 3,5 zu bauen und zu vervielfältigen 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 setzen, wie die Verwendung von ToolboxBrowsableAttribute (false), einige Steuerelemente aus der zunehmend überfüllten Toolbox von Visual Studio zu verstecken, da VS10 nicht laden kann . VisualStudio.Design.dll gegen MWD 3,5 zu bauen. 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, nach dem gleichen Ansatz: haben die gemeinsame Design.dll gegen MWD 4,0 zu bauen, aber haben sowohl VisualStudio.Design.dll und Expression.Design.dll gegen MWD 3,5 bauen und alles in zweifacher Ausfertigung Design.dll geteilt.... . 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 das 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 im März 2009 Veröffentlichung gefolgt oben genannten Schema, um sowohl Visual Studio 2008 und Visual Studio 2010 sowie Blend 3 zu unterstützen.
Laden Sie die Release-März 2009 , 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 brauchen, um den neuen 4,0 MWD verweisen. Hier verwenden wir Präbuildereignis zu berufen, um CopySystemWindows.bat Blend 3 lokalisieren und kopieren Sie die beiden MWD-DLLs zu Binaries-Verzeichnis.
- Bitte beachten Sie die kleine Änderungen an CopySystemWindows.bat Datei: wir brauchen, um zu zitieren: "% THIS_DIR% \ Binaries \ Blend3" (Linien in gelb) zur Bearbeitung der Fälle, wo es einen Raum in dem Pfad zu dem Verzeichnis der Quellcode entpackt zu werden.
Wenn Sie nicht wie die fragile CopySystemWindows.bat Datei oder über Ereignisse zu bauen, können Sie Verweispfade zu helfen, Visual Studio zu finden, wo die neue MWD ist, wie unten dargestellt. Die einzige Einschränkung ist, dass Sie benötigen sowohl% ProgramFiles% und% ProgramFiles (x86)% angeben, damit es auf beiden x86-und x64-Maschinen zu bauen.
. Der Verweis Wege-Einstellung wird in die Datei csproj.user beharrte:
<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 Rahmen wie in Umsetzung beschrieben Design Time Feature-Implementierung in Silverlight-Toolkit , mit einigen kleinen Änderungen:
- Ich zog links auf gemeinsame Dateien und Extensions.cs MetadataBase.cs aus Controls.Design.Common Ordner zu Ordner unter einer Lösung mit dem gleichen Namen;
- .. Metadata.cs in Design und Expression.Design Projekte verwenden die neue Anlaufstelle: verwenden ProvideMetadata Assemblyattribut und implementieren IProvideAttributeTable-Schnittstelle;
- Hinzufügen 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 Dateien in * Metadata.cs entsprechenden Design-Projekt.;
- AddAttributes ()-Methode dupliziert den Inhalt von addAttributes ()-Methode in entsprechend. Design-Projekt.
Abschluss
Während die wichtigen Änderungen in MWD einige Unannehmlichkeiten verursachen kann, ist es notwendig, wie reich ein Design-Erfahrung für Silverlight als für WPF zu implementieren. Dieser Beitrag beschreibt einen Weg, um die wichtigen Änderungen umzugehen und dennoch unterstützen alle bestehenden Designer: Visual Studio 2008, Blend 2 und Blend 3. Nachdem Visual Studio 2010 öffentlich zugänglich ist, werde ich über die neue Namensgebung bloggen, und wie Design Toolkit Zeit Arbeit in Visual Studio 2010. Bleiben Sie dran!
2009.12.05: Update für VS2010 Beta2
Um oben genannte Problem der Unterstützung von Visual Studio und Visual Studio 2008/Blend2 2010/Blend3, die inkompatible Versionen von MWDs (v3.5 vs. V4.0) zu verwenden, die Namenskonvention für Design-Zeit Baugruppen aus VS2010 Beta2 verstärkt zu lösen und Blend 3:
für eine Runtime-Assembly Foo.dll, das gemeinsame Design-Zeit Assembly mit dem Namen wird Foo.Design *. dll, wird die Visual Studio-spezifischen Design-Zeit Assembly mit dem Namen Foo.VisualStudio.Design *. dll, und die Blend-spezifischen Design-Zeit der Montage wird mit dem Namen Foo . Expression.Design *. dll, wobei * Null oder mehr gültige Zeichen für Dateinamen sein kann. Wenn ein Designer (wie Visual Studio oder Blend), eine Design-Zeit mehrere Montage-und Passform der Namenskonvention zu laden versucht, wird Null oder Eins geladen werden:
- Wenn die MWD-Version von der Design-Time-Montage verwiesen hat einen anderen Major-Versionsnummer als der 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 der Designer MWD-Version, lädt das Designer den einen gegen den höchsten MWD-Version, die weniger als oder gleich des Designers MWD-Version ist kompiliert.
Silverlight 3 SDK DDR 2 (auch von VS2010 automatisch installiert) und Silverlight 3 Toolkit Oktober 2009 Veröffentlichung mit der neuen Namensgebung, um sowohl VS2008 und VS2010 zu unterstützen. Nehmen System.Windows.Controls.dll wird zum Beispiel System.Windows.Controls.VisualStudio.Design.dll gegen MWD 3,5 errichtet 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 gebaut wird für VS2010, die die neue Namenskonvention versteht aufgenommen. Bitte beachten Sie Silverlight Design Time Baugruppen für weitere Informationen.










Recent Comments