我知道我可以用FSharp.ViewModule或FSharp.Desktop.UI构建一个WPF应用程序,在本例中,我尝试在C#中构建GUI部分并从F#访问它。我可以从C#启动F#应用程序,它显示了MainWindow,但是我不能从代码中访问对它的任何控制。如何引用此表单上的按钮(名称:按钮)?MainWindow或应用程序在我最初的设置中没有显示它。
C#视图只是一个带有按钮的MainWindow。

F#代码如下:
open System
open WpfView
[<STAThread>]
do
let app = App()
let win = MainWindow()
app.Run(win) |> ignore发布于 2016-05-25 10:28:08
WPF上的控件是“内部”。也就是说,它们只对同一程序集中的代码可见。
F#和C#代码位于单独的程序集中,因此F#代码无法访问C#代码中类的内部成员。
这些控件是由xaml编译器自动生成的,因此您不能直接更改它们,但是,一个简单的修复方法是在您的C#类中创建访问内部属性的公共访问方法和/或属性。
此外,虽然您可能有理由按照您的方式构造您的代码,但最好在C#程序集中拥有应用程序的主要入口点和WPF代码,并在F#程序集中引用您的逻辑。这样,您就可以使用数据绑定来绑定到您用F#编写的模型。
发布于 2016-05-25 10:38:13
默认情况下,WPF窗体中的控件声明为内部控件,在窗体程序集外不可见。您可以在WPF表单的XAML中通过指定以下x:FieldModifier属性来更改这一点:
<Button x:Name="button" Content="Button" x:FieldModifier="public" />但是,将表单赋予您自己的属性来访问表单中的数据,而不是直接处理来自外部的控件,这将是一个更好的设计。
https://stackoverflow.com/questions/37433874
复制相似问题