通过引用默认的WPF DLL,使用代码实现 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)
...然后点击按钮查看它的工作原理。这似乎是一种构建UI组件的非常强大的方式。
在Windows.UI命名空间/控件/UI框架中是否有类似的方法 - 在F#交互中加载一些程序集并动态实例化UI组件?
我尝试了一些看起来相关的文件,但都很幼稚:
#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"
我使用这种方式可以让我在Windows.UI命名空间中获得智能感知。但是当我尝试实例化某些东西时:
Windows.UI.Xaml.Application()
我得到了以下错误信息:
error FS0193:无法加载文件或程序集“file:///C:\Program Files (x86)\Windows Kits\10\References\Windows.Foundation.UniversalApiContract\2.0.0.0\Windows.Foundation.UniversalApiContract.winmd”,或其某个依赖项。 操作不受支持。 (来自 HRESULT 的异常:0x80131515)