ジェネリック型とXAML

2025年3月8日土曜日

C#

記事のカテゴリー: C#、.NET9

XAMLでジェネリック型を扱うときに型パラメーター(例えばList<int>int)はどのように記述するのでしょうか。

x:TypeArgumentsディレクティブ

XAMLのルート要素がジェネリック型の場合はx:TypeArgumentsディレクティブを使って型パラメーターを指定できます。

このx:TypeArgumentsディレクティブがもっと広範に使えたら便利なのですが。

XAML:

<local:InputDialog
    x:TypeArguments="system:String"
    xmlns:system="clr-namespace:System;assembly=mscorlib"
    ...>

参照

ラッパークラスで包む

ラッパークラスで包んであげるとXAMLで型パラメーターを指定する必要がなくなります。

C#:

public class StringNode : Node<string>
{
    ...
}

XAML:

<Window.Resources>
    <local:StringNode ... />
</Window.Resources>

静的フィールドを使う

Type型のプロパティにジェネリック型を指定したいときは、任意のクラスにジェネリック型の静的フィールドを宣言してx:Staticで指定すると型パラメーターを指定する必要がなくなります。

C#:

public static class GenericTypes
{
    public static readonly Type StringNode = typeof(Node<string>);
}

XAML:

<Style TargetType="{x:Static local:GenericTypes.StringNode}">
    ...
<Style>