F# で WPF

WPFにも挑戦してみました。Windowにコントロールを追加するメソッド(AddChild)が外部からアクセスできないので芋づる式にクラス定義と継承までやってしまいました。理解はしていません。

MSDNブログの
Learning WPF through F#, and vice versa, by John Liao - Don Syme's WebLog on F# and Related Topics - Site Home - MSDN Blogs
辺りを参考にしました。

#light 
#I @"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0"
#r @"WindowsBase.dll"
#r @"PresentationCore.dll"
#r @"PresentationFramework.dll"

open System
open System.Windows
open System.Windows.Controls
open System.Windows.Media

type HelloWindow = class
    inherit Window as base
    
    new () as this = {} then
        this.Title <- "Hello"
        
        let btn = new Button()
        btn.Content <- "Click"
        btn.FontSize <- 45.0
        btn.Background <- Brushes.LightBlue
        btn.Click.Add(fun arg -> this.Close()) // 押したら閉じる
        this.AddChild btn
end

#if COMPILED
[<STAThread()>]
do 
    let app =  new Application() in
    app.Run(new HelloWindow()) |> ignore
#endif

コーディング中にインデントにタブを使うなとかインデントしすぎだとか警告が出てきましたが、その辺も言語レベルで定められているのでしょうか。Pythonみたいな感じなのかな。