如何定义 MarkupExtension 提供的值的类型?
How to define the type of a MarkupExtension provided value?
我在 xaml 中遇到一个问题,其中自定义 MarkupExtension
的 ProvideValue
returns 是一个字符串,但是 xaml “编译”没有我不知道并给出以下错误: A key for a dictionary cannot be of type 'MyNamespace.MyExtension'. Only String, TypeExtension, and StaticExtension are supported.
这个错误很不幸,因为我知道所提供的值实际上是一个字符串,根据错误消息,这是一个可接受的类型。这是重现错误的示例:
分机号:[=15=]
[MarkupExtensionReturnType(typeof(String))]
public class MyExtension : MarkupExtension
{
public override object ProvideValue(IServiceProvider serviceProvider)
{
return "Hello World!";
}
}
用法:
<sys:Double x:Key="{my:MyExtension}">99</sys:Double>
EDIT2:简化了问题,因为我在测试后发现它可能更具体
要解决您的问题,您可以使 MyExtension
继承自 StaticExtension
或 TypeExtension
(均来自 System.Windows.Markup
)。这看起来不太干净,因为 MyExtension
与 TypeExtension
或 StaticExtension
无关,但这是我所知道的绕过编译时检查的唯一方法,确保资源键只String
、TypeExtension
或 StaticExtension
.
类型
从 TypeExtension
或 StaticExtension
继承后,如果您直接从 MarkupExtension
继承(因此您只需覆盖 ProvideValue
)您当前的实施。
我在 xaml 中遇到一个问题,其中自定义 MarkupExtension
的 ProvideValue
returns 是一个字符串,但是 xaml “编译”没有我不知道并给出以下错误: A key for a dictionary cannot be of type 'MyNamespace.MyExtension'. Only String, TypeExtension, and StaticExtension are supported.
这个错误很不幸,因为我知道所提供的值实际上是一个字符串,根据错误消息,这是一个可接受的类型。这是重现错误的示例:
分机号:[=15=]
[MarkupExtensionReturnType(typeof(String))]
public class MyExtension : MarkupExtension
{
public override object ProvideValue(IServiceProvider serviceProvider)
{
return "Hello World!";
}
}
用法:
<sys:Double x:Key="{my:MyExtension}">99</sys:Double>
EDIT2:简化了问题,因为我在测试后发现它可能更具体
要解决您的问题,您可以使 MyExtension
继承自 StaticExtension
或 TypeExtension
(均来自 System.Windows.Markup
)。这看起来不太干净,因为 MyExtension
与 TypeExtension
或 StaticExtension
无关,但这是我所知道的绕过编译时检查的唯一方法,确保资源键只String
、TypeExtension
或 StaticExtension
.
从 TypeExtension
或 StaticExtension
继承后,如果您直接从 MarkupExtension
继承(因此您只需覆盖 ProvideValue
)您当前的实施。