[英]Accessing C# WPF from F#
我知道我可以使用FSharp.ViewModule或FSharp.Desktop.UI构建WPF应用程序。 在这种情况下,我试图在C#中构建GUI部件并从F#中访问它。 我可以从F#启动C#应用程序,它显示MainWindow,但是我无法从代码访问它的任何控件。 我将如何引用此表单上的按钮(名称:按钮)? MainWindow或App在我的初始设置中未显示。
F#代码是这样的:
open System
open WpfView
[<STAThread>]
do
let app = App()
let win = MainWindow()
app.Run(win) |> ignore
WPF上的控件是“内部”的。 也就是说,它们仅对同一程序集中的代码可见。
您的F#和C#代码位于单独的程序集中,因此您的F#代码无法访问C#代码中类的内部成员。
控件是由xaml编译器自动生成的,因此您不能直接更改它们,但是一个简单的解决方法是在访问内部属性的C#类中创建公共访问方法和/或属性。
此外,虽然您可能有理由按自己的方式来构造代码,但最好将C#程序集中的应用程序的主入口点与WPF代码一起使用,并在F#程序集中引用您的逻辑。 这样,您可以使用数据绑定来绑定到用F#编写的模型。
默认情况下,WPF窗体中的控件被声明为内部控件,并且在窗体的程序集外部不可见。 您可以通过指定x:FieldModifier
属性在WPF表单的XAML中进行更改,如下所示:
<Button x:Name="button" Content="Button" x:FieldModifier="public" />
但是,将表单赋予您自己的属性以访问表单中的数据,而不直接从外部处理控件将是更好的设计。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.