gpt4 book ai didi

wpf - WPF 和 F# 背后的代码

转载 作者:行者123 更新时间:2023-12-04 16:13:08 36 4
gpt4 key购买 nike

是否可以在 F# 中创建一个使用 WPF 的应用程序,并保留经典代码?我知道它可以完美地与 MVVM 配合使用并且没有隐藏代码,但我需要在 UserControl 上实现一个接口(interface)。 F# 可以吗?

为了提供一点帮助,这里是我想从 C# 转换为 F# 的代码

public class Test : UserControl, IContent {

public void InitializeComponents() {
// Do the initialization magic
}

public Test() {
}

public void OnFragmentNavigation(FragmentNavigationEventArgs e) {
this.DataContext = new { description = "Hallo Welt :)" };
}

public void OnNavigatedFrom(NavigationEventArgs e) {
}

public void OnNavigatedTo(NavigationEventArgs e){
}

public void OnNavigatingFrom(NavigatingCancelEventArgs e) {
}
}

这是标记

<UserControl xmlns="http://schemas.microsoft.com/netfx/2007/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Test">
<TextBlock Text="{Binding description}"></TextBlock>
</UserControl>

最佳答案

这实际上取决于您所说的“隐藏的经典代码”是什么意思。正如 Petr 所提到的,F# 没有部分类(也没有编辑器支持),因此您不会获得相同的体验(当您访问元素或添加事件时)。但您当然可以构建使用相同编程模型的 WPF 应用程序。

获得非常接近标准代码的方法之一是定义一个类,与每个 xaml 文件相关联,看起来像这样:

type SomeComponent() =
let uri = System.Uri("/AppName;component/SomeComponent.xaml", UriKind.Relative)
let ctl = Application.LoadComponent(uri) :?> UserControl

let (?) (this : Control) (prop : string) : 'T =
this.FindName(prop) :?> 'T

let okBtn : Button = ctl?OkButton
do okBtn.Click.Add(fun _ -> (* .. whatever *) )

这会加载 XAML 内容,然后使用动态查找运算符查找所有 UI 元素(您可以在 C# 中免费获得)。更好的 F# 解决方案是使用 FsXaml ,它有一个 XAML 类型提供程序(但遗憾的是,文档不多)。

关于wpf - WPF 和 F# 背后的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29041919/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com