簡體   English   中英

如何在F#中使用WPF菜單和對話框?

[英]How can I use WPF menus and dialog boxes in F#?

我一直在嘗試尋找一個使用XAML和F#(不使用C#)來設置傳統菜單和對話框的示例。 我可以在網上找到的所有內容都使用C#,或者使用的都是舊版本,而不是最新版本的F#和.NET。 任何人都可以提出一個我可以看的例子嗎? 謝謝。

當您嘗試學習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

應用程式

<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可能不是發布像這樣的完整演示的最佳地方,特別是如果它沿同一行產生了更多問題時,尤其如此。 如果還有其他更好的地方,例如針對此類事情的公共倉庫,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM