在应用程序后面创建一个新的 F WPF 代码

创建一个 F#控制台应用程序。

将应用程序的输出类型更改为 Windows 应用程序

添加 FsXaml NuGet 包。

按此处列出的顺序添加这四个源文件。

MainWindow.xaml

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="First Demo" Height="200" Width="300">
    <Canvas>
        <Button Name="btnTest" Content="Test" Canvas.Left="10" Canvas.Top="10" Height="28" Width="72"/>
    </Canvas>
</Window>

MainWindow.xaml.fs

namespace FirstDemo

type MainWindowXaml = FsXaml.XAML<"MainWindow.xaml">

type MainWindow() as this =
    inherit MainWindowXaml()

    let whenLoaded _ =
        ()

    let whenClosing _ =
        ()

    let whenClosed _ =
        ()

    let btnTestClick _ =
        this.Title <- "Yup, it works!"

    do
        this.Loaded.Add whenLoaded
        this.Closing.Add whenClosing
        this.Closed.Add whenClosed
        this.btnTest.Click.Add btnTestClick

App.xaml 中

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Application.Resources>
    </Application.Resources>
</Application>

App.xaml.fs

namespace FirstDemo

open System

type App = FsXaml.XAML<"App.xaml">

module Main =

    [<STAThread; EntryPoint>]
    let main _ =
        let app = App()
        let mainWindow = new MainWindow()
        app.Run(mainWindow) // Returns application's exit code.

从项目中删除 Program.fs 文件。

更改生成操作,以资源为两个 XAML 文件。

添加对 .NET 程序集 UIAutomationTypes 的引用。

编译并运行。

你无法使用设计器添加事件处理程序,但这根本不是问题。只需在后面的代码中手动添加它们,就像在本例中看到的三个处理程序一样,包括测试按钮的处理程序。

更新:FsXaml 中添加了另一种可能更加优雅的添加事件处理程序的方法。你可以在 XAML 中添加事件处理程序,与 C#中相同,但你必须手动执行,然后覆盖在 F#类型中出现的相应成员。我推荐这个。