首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从C#访问F# WPF

从C#访问F# WPF
EN

Stack Overflow用户
提问于 2016-05-25 10:05:35
回答 2查看 189关注 0票数 1

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

C#视图只是一个带有按钮的MainWindow。

F#代码如下:

代码语言:javascript
复制
open System
open WpfView    

[<STAThread>]

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

    app.Run(win) |> ignore
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-25 10:28:08

WPF上的控件是“内部”。也就是说,它们只对同一程序集中的代码可见。

see: Internal access modifier

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

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

此外,虽然您可能有理由按照您的方式构造您的代码,但最好在C#程序集中拥有应用程序的主要入口点和WPF代码,并在F#程序集中引用您的逻辑。这样,您就可以使用数据绑定来绑定到您用F#编写的模型。

票数 7
EN

Stack Overflow用户

发布于 2016-05-25 10:38:13

默认情况下,WPF窗体中的控件声明为内部控件,在窗体程序集外不可见。您可以在WPF表单的XAML中通过指定以下x:FieldModifier属性来更改这一点:

代码语言:javascript
复制
<Button x:Name="button" Content="Button" x:FieldModifier="public" />

但是,将表单赋予您自己的属性来访问表单中的数据,而不是直接处理来自外部的控件,这将是一个更好的设计。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37433874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档