F # unterstützt weder partielle Klassen noch die Vorkompilierung von XAML-Dateien. Die Problemumgehung: Laden Sie die grafischen Objektdefinitionen zur Laufzeit statt des Codes für die Kompilierungszeit. Es gibt verschiedene Möglichkeiten, XamlReader mit dem Inhalt einer referenzierten Ressourcendatei zu versorgen.Vorteil des Providers FsXaml über XamlReader
open System.Windows
// from Resource
let uri = System.Uri "pack://application:,,,/AssemblyName;component/MainWindow.xaml"
let info = Application.GetResourceStream uri
let wnd = Markup.XamlReader.Load info.Stream :?> Window
// from Embedded resource
let assembly = System.Reflection.Assembly.GetExecutingAssembly()
let stream = assembly.GetManifestResourceStream "MainWindow.xaml"
let wnd = Markup.XamlReader.Load stream :?> Window
Typ-Anbieter sollten in der Lage sein, zumindest einen Teil dieser Bemühungen zu verschieben zurück zu Zeit zu kompilieren.
Der Gewinn in der Typsicherheit (und Entdeckung) scheint marginal zu sein: Ein Laufzeittyp wird weniger pro Ressource gewirkt. Gibt es andere Vorteile?
Ich würde das nicht marginal nennen ... z.B.Wenn Sie über benutzerdefinierte Komponenten verfügen, wie können Sie sicher auf benannte Steuerelemente zugreifen, ohne dass während der Kompilierung Typinformationen vorhanden sind? Und ja, Typ Provider könnte theoretisch baml speichern (fühlte nie die Notwendigkeit, obwohl meist Angular.JS UIs im Moment tun). – CaringDev