かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

添付プロパティをセットしたオブジェクトを作成するヘルパー関数

思いついたのでLINQ Padでさくっと試してみた。

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

module WPF =
    /// 添付プロパティと値の組を作成する
    let (@<<) (dp : DependencyProperty) (value : obj) = (dp, value)
    
    /// DependencyObjectに添付プロパティをセットする
    let withAProp<'T when 'T :> DependencyObject> (t : 'T) (dps : seq<(DependencyProperty * obj)>) =
        dps |> Seq.iter (fun dp -> t.SetValue(fst dp, snd dp))
        t


open WPF
// 依存プロパティつきのボタンを作成する
let b = withAProp 
            (Button(Content = "OK"))
            [
                Grid.RowProperty @<< 1;
                Grid.ColumnProperty @<< 1;
                ToolTipService.ToolTipProperty @<< "ToolTip"
            ]

// 価の確認
b.Content.Dump()
b.GetValue(Grid.RowProperty).Dump()
b.GetValue(ToolTipService.ToolTipProperty).Dump()

実行結果は以下の通り。

OK
1
ToolTip

うん、少しすっきりかなぁ???