答えは、すでに NOPE を想定している可能性があるためです。そのようなクラス属性はありません。私が知っているものはありません。
大量の例外があり、xaml をできるだけシンプルに保ちたいとおっしゃっていたので、キーに基づいて他の拡張機能を呼び出す拡張機能を 1 つだけ用意するのはどうですか。
特定のキーの背後にあるすべての拡張機能を隠すようなものです。
これを見てください:
public class MyExtExtension : MarkupExtension
{
public string Output
{
get; set;
}
public MyExtExtension(string output)
{
this.Output = output;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this.Output;
}
}
public class MarkupExtensionChooser : MarkupExtension
{
public string Key
{
get;
set;
}
public StringList Param
{
get; set;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
if (this.Key.Equals("ext"))
{
return new MyExtExtension(this.Param.Data[0]).ProvideValue(serviceProvider);
}
if (this.Key.Equals("ext123"))
{
// Custom Logic
}
if (this.Key.Equals("ext123123123"))
{
// Custom Logic
}
if (this.Key.Equals("ext123123123"))
{
// Custom Logic
}
if (this.Key.Equals("ext12121412423"))
{
// Custom Logic
}
return this;
}
}
public class StringListTypeConverter : TypeConverter
{
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
{
if (value is string)
{
string val = (string)value;
return new StringList(val.Split(','));
}
return null;
}
}
[TypeConverter(typeof(StringListTypeConverter))]
public class StringList
{
public string[] Data
{
get; set;
}
public StringList(string[] data)
{
this.Data = data;
}
}
パラメータも受け入れることができるその「セレクタークラス」を作成し、キーに基づいて必要な拡張機能を返しました。
TypeConverter は、xaml で使用できるようにするためのものParam="args1,args2,args3"
です。
これは、メインウィンドウの私の例がどのように見えるかです:
<TextBox Text="{local:MarkupExtensionChooser Key=ext, Param='hello,world'}"/>
Hello
myExtExtension に param[0] を渡すので、TextBox に表示されます。
私には問題なく動作しますが、このようなものを使用できるかどうかはわかりません。
アイデアは非常に単純ですが、最終的にはこれの背後にある wpf のトリックが少しあります。フォローできない場合はお知らせください。喜んでお手伝いさせていただきます。