从F#访问C#WPF

s95*_*163 1 c# wpf xaml f#

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

C#View只是一个带有Button的MainWindow.
在此输入图像描述

F#代码是这样的:

open System
open WpfView    

[<STAThread>]

do
    let app = App()
    let win = MainWindow()

    app.Run(win) |> ignore
Run Code Online (Sandbox Code Playgroud)

Dav*_*d J 7

WPF上的控件是"内部".也就是说,它们仅对同一程序集中的代码可见.

请参阅:内部访问修饰符

您的F#和C#代码位于单独的程序集中,因此您的F#代码无法访问C#代码中的类的内部成员.

控件由xaml编译器自动生成,因此您无法直接更改它们,但是一个简单的修复方法是在C#类中创建访问内部属性的公共访问方法和/或属性.

此外,虽然你可能有理由构建你的代码,你有办法,这可能是更好的有主入口点与WPF代码沿C#程序集的应用程序,并且具有参考在F#组装你的逻辑.这样,您可以使用数据绑定绑定到您在F#中编写的模型.