我知道我可以使用 FSharp.ViewModule 或 FSharp.Desktop.UI 构建 WPF 应用程序。在这种情况下,我尝试在 C# 中构建 GUI 部分并从 F# 访问它。我可以从 F# 启动 C# 应用程序,它显示 MainWindow,但是我无法从代码访问任何控件。我将如何引用此表单上的按钮(名称:按钮)? MainWindow 或 App 在我的初始设置中没有显示它。
C# View 只是一个主窗口,上面有一个按钮。
F# 代码是这样的:
open System
open WpfView
[<STAThread>]
do
let app = App()
let win = MainWindow()
app.Run(win) |> ignore
最佳答案
WPF 上的控件是“内部的”。也就是说,它们仅对同一程序集中的代码可见。
see: Internal access modifier
您的 F# 和 C# 代码位于不同的程序集中,因此您的 F# 代码无法访问 C# 代码中类的内部成员。
这些控件由 xaml 编译器自动生成,因此您无法直接更改它们,但是一个简单的修复方法是在您的 C# 类中创建访问内部属性的公共(public)访问方法和/或属性。
此外,虽然您可能有理由按照自己的方式构建代码,但最好将应用程序的主入口点与 WPF 代码一起放在 C# 程序集中,并在 F# 程序集中引用您的逻辑。这样您就可以使用数据绑定(bind)来绑定(bind)到您用 F# 编写的模型。
关于c# - 从 F# 访问 C# WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37433874/