Ich versuche, mich mit der neuen Windows 8-Laufzeit vertraut zu machen, mit der Apps im Metro- Stil erstellt werden. Ich weiß, dass Sie es mit XAML verwenden können und es auf .NET basiert, sodass C # und VB.NET zum Schreiben der Apps verwendet werden können, aber dann scheint es etwas mit HTML, CSS, DOM und JavaScript zu tun zu haben.
Kann jemand in ein paar Absätzen erklären, was ein .NET UI-Programmierer verstehen kann? (Mir fehlt ein „Schlüssel“, der notwendig ist, um ihn zu verstehen.)
Wir alle wissen, dass WPF, Silverlight , Windows Forms usw. unter Windows 8 (und Windows 10) zumindest auf Intel-Systemen weiterhin funktionieren. Sagen Sie mir also bitte nicht, dass ...
wpf
windows-runtime
windows-store-apps
windows-10
win-universal-app
Ian Ringrose
quelle
quelle
Windows.*
Namespaces abdecken. Die bisherige Terminologie ist hier etwas verwirrend, da sich WinRT sowohl auf die Technologie als auch auf den gesamten Satz von Standardbibliotheken bezieht. Ich glaube nicht, dass es nur für die UI-Bibliotheken (Windows.UI.*
) eine prägnante Bezeichnung gibt .Antworten:
Auf der untersten Ebene ist WinRT ein Objektmodell, das auf ABI-Ebene definiert ist. Es verwendet COM als Basis (also implementiert
IUnknown
und führt jedes WinRT-Objekt eine Nachzählung durch) und erstellt von dort aus. Im Vergleich zu alten COM-Konzepten, von denen die meisten direkt aus .NET stammen, werden viele neue Konzepte hinzugefügt. Das WinRT-Objektmodell verfügt beispielsweise über Delegaten, und Ereignisse werden im .NET-Stil ausgeführt (mit Delegaten und Abonnenten hinzufügen / entfernen) Methoden, eine pro Ereignis) anstelle des alten COM-Modells für Ereignisquellen und -senken. Von anderen bemerkenswerten Dingen hat WinRT auch parametrisierte ("generische") Schnittstellen.Eine weitere große Änderung besteht darin, dass für alle WinRT-Komponenten Metadaten verfügbar sind, genau wie für .NET-Assemblys. In COM hatten Sie das irgendwie mit Typelibs, aber nicht jede COM-Komponente hatte sie. Für WinRT sind die Metadaten in .winmd-Dateien enthalten. Sehen Sie in der Entwicklervorschau unter "C: \ Programme (x86) \ Windows Kits \ 8.0 \ Windows-Metadaten \" nach. Wenn Sie herumstöbern, werden Sie feststellen, dass es sich tatsächlich um CLI-Assemblys ohne Code handelt, sondern nur um Metadatentabellen. Sie können sie tatsächlich mit ILDASM öffnen. Beachten Sie, dass dies nicht bedeutet, dass WinRT selbst verwaltet wird - es verwendet einfach das Dateiformat.
Dann gibt es eine Reihe von Bibliotheken, die in Bezug auf dieses Objektmodell implementiert sind und WinRT-Schnittstellen und -Klassen definieren. Sehen Sie sich erneut den oben genannten Ordner "Windows-Metadaten" an, um zu sehen, was sich dort befindet. oder starten Sie einfach den Objektbrowser in VS und wählen Sie "Windows 8.0" in der Framework-Auswahl, um zu sehen, was behandelt wird. Es gibt viel, und es geht nicht nur um die Benutzeroberfläche - Sie erhalten auch Namespaces wie
Windows.Data.Json
, oderWindows.Graphics.Printing
, oderWindows.Networking.Sockets
.Dann erhalten Sie mehrere Bibliotheken, die sich speziell mit der Benutzeroberfläche befassen - meistens handelt es sich dabei um verschiedene Namespaces unter
Windows.UI
oderWindows.UI.Xaml
. Viele von ihnen sind den WPF / Silverlight-Namespaces sehr ähnlich - z. B. stimmen sieWindows.UI.Xaml.Controls
eng übereinSystem.Windows.Controls
; das Gleiche gilt fürWindows.UI.Xaml.Documents
etc.Jetzt kann .NET WinRT-Komponenten direkt referenzieren, als wären sie .NET-Assemblys. Dies funktioniert anders als bei COM Interop - Sie benötigen keine Zwischenartefakte wie Interop-Assemblys, sondern nur
/r
eine .winmd-Datei, und alle Typen und ihre Mitglieder in ihren Metadaten werden für Sie sichtbar, als wären sie .NET-Objekte. Beachten Sie, dass die WinRT-Bibliotheken selbst vollständig nativ sind (und daher native C ++ - Programme, die WinRT verwenden, überhaupt keine CLR benötigen) - die Magie, all das verwaltete Material verfügbar zu machen, befindet sich in der CLR selbst und ist ziemlich niedrig. Wenn Sie ein .NET-Programm verwenden, das auf eine .winmd-Datei verweist, werden Sie feststellen, dass es tatsächlich wie eine externe Assembly-Referenz aussieht - es gibt keine handlichen Tricks wie das Einbetten von Typen.Es ist auch keine stumpfe Zuordnung - CLR versucht, WinRT-Typen nach Möglichkeit an ihre Entsprechungen anzupassen. So zB GUIDs, Termine und URIs werden
System.Guid
,System.DateTime
undSystem.Uri
sind; WinRT-Erfassungsschnittstellen wieIIterable<T>
undIVector<T>
werdenIEnumerable<T>
undIList<T>
; und so weiter. Dies geht in beide Richtungen: Wenn Sie ein implementiertes .NET-ObjektIEnumerable<T>
haben und es an WinRT zurückgeben, wird es als angezeigtIIterable<T>
.Dies bedeutet letztendlich, dass Ihre .NET Metro-Apps Zugriff auf eine Teilmenge der vorhandenen Standard-.NET-Bibliotheken sowie auf (native) WinRT-Bibliotheken erhalten, von denen einige - insbesondere
Windows.UI
- Silverlight in Bezug auf die API sehr ähnlich sehen. Sie haben immer noch XAML, um Ihre Benutzeroberfläche zu definieren, und Sie beschäftigen sich immer noch mit denselben Grundkonzepten wie in Silverlight - Datenbindungen, Ressourcen, Stile, Vorlagen usw. In vielen Fällen ist es möglich, eine Silverlight-App einfach überusing
die neuen Namespaces zu portieren. und Optimieren einiger Stellen im Code, an denen die API angepasst wurde.WinRT selbst hat nichts mit HTML und CSS zu tun und hat nur in dem Sinne eine Beziehung zu JavaScript, dass es auch dort verfügbar gemacht wird, ähnlich wie es für .NET gemacht wird. Sie müssen sich nicht mit HTML / CSS / JS befassen, wenn Sie WinRT-UI-Bibliotheken in Ihrer .NET Metro-App verwenden (ich denke, wenn Sie wirklich wollen, können Sie ein
WebView
Steuerelement hosten ...). Alle Ihre .NET- und Silverlight-Kenntnisse bleiben in diesem Programmiermodell sehr relevant.quelle
Aus der Build- Keynote:
Sie bieten gemeinsame APIs sowohl für HTML / CSS / JavaScript-Apps als auch für C # / XAML-Apps. C # und XAML werden verwendet, aber es wird nicht genau WPF oder Silverlight sein.
quelle
Die Schlüsselidee ist, dass es jetzt zwei Entwicklungspfade gibt - den Desktop und den Metro.
Einige wichtige Punkte:
quelle
Popup
( msdn.microsoft.com/en-us/library/windows/apps/… ). Wenn Sie möchten, können Sie also etwas MDI-ähnliches erfinden . Es wird offensichtlich nicht empfohlen, es zu missbrauchen, da Sie Gefahr laufen, eine nicht berührungsfreundliche Benutzeroberfläche zu erhalten.localhost
können Sie nur eine Verbindung zu derselben App herstellen. Sie könnten normale Dateien in einem der freigegebenen "bekannten Ordner" (Dokumente, Bilder usw.) verwenden, aber das ist ein ziemlich grober Hack, der eine Abfrage erfordert und für den Benutzer sichtbar ist.Es gibt eine modifizierte Version der Architektur, die Ihnen sicherlich hilft zu verstehen, wo genau die Dinge liegen. Einer der Telerik-Ninjas unterhielt sich mit dem CLR- Team und änderte das Bild:
Hier können Sie sehen, wo die CLR steht. Das .NET Framework verfügt jetzt über zwei Profile
1- .NET Metro-Profil (CLR, die sich mit Metro-Anwendungen befasst)
2- .NET-Client-Profil (CLR-Laufzeit für C # - und VB.NET-Anwendungen)
Ich hoffe, das gibt Ihnen ein klareres Bild. Lesen Sie den vollständigen Artikel in Ein schlechtes Bild ist tausend lange Diskussionen wert. .
quelle
Viele Details von Microsoft hier .
Kurz gesagt, Windows Runtime ist eine neue Reihe von Bibliotheken, die Windows-Funktionen verfügbar machen und für JavaScript / C # / VB / C ++ verfügbar sind. Jede Sprache wurde dazu gebracht, sie zu verstehen und direkt anrufen zu können, anstatt eine dicke Schicht durchlaufen zu müssen.
Silverlight und WPF sind XAML-Varianten, die auf der CLR ausgeführt werden. Windows Runtime stellt unter anderem eine Version von XAML zur Verfügung, die Silverlight sehr ähnlich ist, dies jedoch auf native Weise und nicht über die CLR. Der Zugriff erfolgt über die CLR, aber auch über C ++.
quelle