答案是您可能已经假设 NOPE。没有这样的类属性。我不知道。
既然您提到您有大量异常,并且您希望使 xaml 尽可能简单,那么您是否只有一个基于密钥调用其他扩展的扩展。
就像将所有这些扩展隐藏在某个键后面一样。
看看这个:
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 只是为了允许Param="args1,args2,args3"
在 xaml 中使用。
这就是我在主窗口中的示例的样子:
<TextBox Text="{local:MarkupExtensionChooser Key=ext, Param='hello,world'}"/>
Hello
将显示在 TextBox 中,因为我将 param[0] 传递给 MyExtExtension。
它对我来说很好,但我不确定你是否可以使用这样的东西。
这个想法很简单,但最后它背后有一点 wpf 欺骗,如果你不能理解,请告诉我。我很乐意再为您提供帮助。