c# - 从 F# 访问 C# WPF

标签 c# wpf xaml f#

我知道我可以使用 FSharp.ViewModule 或 FSharp.Desktop.UI 构建 WPF 应用程序。在这种情况下,我尝试在 C# 中构建 GUI 部分并从 F# 访问它。我可以从 F# 启动 C# 应用程序,它显示 MainWindow,但是我无法从代码访问任何控件。我将如何引用此表单上的按钮(名称:按钮)? MainWindow 或 App 在我的初始设置中没有显示它。

C# View 只是一个主窗口,上面有一个按钮。
enter image description here

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/

相关文章:

c# - (VB 或 C#)在系统托盘中运行应用程序并在应用程序未处于焦点时收听键盘输入

c# - 添加程序集引用后,类型或命名空间名称 'ComponentModel' 在命名空间中不存在

wpf - 更改WPF项目的启动文件

c# - 将 ViewModel 绑定(bind)到多个窗口

c# - 具有自定义属性的用户控件

c# - 数据绑定(bind)到可观察集合的属性总是显示 15

c# - 如何使用 ASP.NET 或其他方式阻止浏览器关闭?

c# - 即使控制台应用程序退出,线程也保持事件状态

c# - 在 WPF 中处理文本框上的 Enter 事件时,如何接受 Ctrl+Enter 作为返回?

WPF/MVVMDo 我在使用 ViewModelLocator 时需要像 Unity/LightCore 这样的依赖项注入(inject)工具