我有没有默认构造函数的MyListYExtension标记扩展。因此只能使用构造函数语法创建它。另一个GetValueExtension标记扩展尝试确定所要求的值的目标类型,以便它可以进行必要的转换。例如,如果您将第二个扩展的值分配给Double类型的属性,GetValueExtension会理解它并返回 2.0 而不是“2”。虚拟示例:
{MyListX Capacity={GetValue ListCapacityParam}}
如果我将GetValueExtension分配给一个属性,一切都会好起来的。然后可以通过MarkupExtension.ProvideValue访问目标类型
((IProvideValueTarget)serviceProvider).TargetProperty.PropertyType
但是当我应用GetValueExtension作为 MyListYExtension 构造函数的参数时, TargetProperty为空:
<!-- no default constructor in MyListY -->
<!-- the first parameter of MyListY is "int capacity" -->
{MyListY {GetValue ListCapacityParam}}
当 XAML 解析器为属性分配值时,它会执行默认转换。但是当它从标记扩展中获取值时它不会这样做。它会导致无法将字符串值分配给 double 属性的异常。为避免这种情况,我尝试模拟默认转换,但为此需要知道目标类型。
我找不到任何解决方法来确定MarkupExtension.ProvideValue调用中构造函数参数的实际类型。
我可以修改GetValueExtension但不能修改MyListYExtension。
我能做些什么来解决这个问题?