ジェネリック型とXAML

2025年3月8日土曜日

C#

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

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

x:TypeArgumentsディレクティブ

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

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

XAML:

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

参照

ラッパークラスで包む

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

C#:

  1. public class StringNode : Node<string>
  2. {
  3. ...
  4. }

XAML:

  1. <Window.Resources>
  2. <local:StringNode ... />
  3. </Window.Resources>

静的フィールドを使う

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

C#:

  1. public static class GenericTypes
  2. {
  3. public static readonly Type StringNode = typeof(Node<string>);
  4. }

XAML:

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