如何在F#中使用WPF菜单和对话框?

时间:2017-01-29 04:42:18

标签: wpf menu f# dialog

我一直试图找到一个使用XAML和F#的例子 - 没有C# - 来设置传统的菜单和对话框。在F#和.NET的最新版本之前,我在网上找到的所有东西都使用C#或者它是旧的。任何人都可以建议我可以看一个例子吗?感谢。

1 个答案:

答案 0 :(得分:3)

当您尝试学习WPF时,您会遇到许多基于“老旧”代码而不是MVVM或MVC的C#示例。以下说明如何在应用程序后快速创建F#WPF代码。使用它,可以更轻松地试验所有这些示例。

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

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

从NuGet添加 FsXaml

添加这四个源文件,并按此顺序排列。

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() =
    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
open System.Windows

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 的引用。

编译并运行。

您无法使用设计器添加事件处理程序。只需在后面的代码中手动添加它们。

StackOverflow可能不是发布像这样的完整演示的最佳位置,特别是如果这样可以在同一行上传播更多问题。如果还有另一个更好的地方,例如对于这种事情的公共回购,请告诉我。