Ссылаясь на библиотеки DLL WPF по умолчанию, довольно легко делать все, что вы могли бы сделать, используя WPF только для кода:
#r "PresentationCore.dll"
#r "PresentationFramework.dll"
// ...other DLLs...
#r "WindowsBase.dll"
let window = System.Windows.Window()
let panel = System.Windows.Controls.StackPanel()
let button = System.Windows.Controls.Button()
panel.Children.Add button
button.Content <- "hi"
window.Content <- panel
window.Show()
... и вы можете манипулировать им, пока окно все еще открыто ...
button.Click.Add (fun _ ->
button.Content <-
button.Content :?> string |> fun x -> (x + "!") :> obj)
... а затем нажмите кнопку, чтобы увидеть, как это работает. Это кажется довольно мощным способом создания компонентов пользовательского интерфейса.
Есть ли способ сделать то же самое с пространством имен / элементами управления / инфраструктурой пользовательского интерфейса Windows.UI - загрузить некоторые сборки в интерактивном F # и создать экземпляры компонентов пользовательского интерфейса на лету?
Я наивно пытался сослаться на файлы, которые казались актуальными:
#r @"C:\Program Files (x86)\Windows Kits\10\References\Windows.Foundation.UniversalApiContract\2.0.0.0\Windows.Foundation.UniversalApiContract.winmd"
#r @"C:\Program Files (x86)\Windows Kits\10\References\Windows.Foundation.FoundationContract\2.0.0.0\Windows.Foundation.FoundationContract.winmd"
... и это дает мне intellisense в пространствах имен Windows.UI. Но когда я пытаюсь создать что-то:
Windows.UI.Xaml.Application()
Я получил:
error FS0193: Could not load file or assembly 'file:///C:\Program Files (x86)\Windows Kits\10\References\Windows.Foundation.UniversalApiContract\2.0.0.0\Windows.Foundation.UniversalApiContract.winmd' or one of its dependencies. Operation is not supported. (Exception from HRESULT: 0x80131515)