是否可以将标记扩展名编写为嵌套元素而不是属性?我正在尝试使用Boolean
作为ResourceDictionary
条目的关键字。
ResourceDictionary
密钥类型为字符串的当前代码:
<UserControl.Resources>
<my:ObjectToResourceConverter x:Key="StatusConverter">
<ResourceDictionary>
<BitmapImage x:Key="True" UriSource="/TestProject;/Resources/Open.png"/>
<BitmapImage x:Key="False" UriSource="/TestProject;/Resources/Closed.png" />
</ResourceDictionary>
</my:ObjectToResourceConverter>
</UserControl.Resources>
所需代码但由于以下原因而无法编译:
无法识别的代码x:密钥
XAML
...
<BitmapImage UriSource="/TestProject;/Resources/Open.png">
<x:Key>
<x:Boolean>True</x:Boolean>
</x:Key>
</BitmapImage>
...
答案 0 :(得分:3)
嗯,是的,您通常可以使用元素语法声明标记扩展,但x:Key
实际上是指令,而不是标记扩展。如上所述,here,x:Key
不支持XAML 2006中的元素语法。如果您使用XAML 2009,则可以,但您不太可能(或者想要)。
但即使你能做到这一点,也没有用,因为(在XAML 2006中; XAML 2009可能不同,没有检查)资源字典的密钥只能使用string
设置, x:Type
或x:Static
。因此,对于您的情况,您需要定义一个生成false
的静态属性,并使用x:Static
将其设置为键。
修改仅支持string
,x:Type
和x:Static
的部分并非完全正确。我太信任编译器错误消息(支持'Only String,TypeExtension和StaticExtension'。)。至少还有一种其他受支持的密钥类型:ComponentResourceKey。可能有更多我忘记了或者我不知道。但无论如何,不支持任意标记扩展(如返回布尔值的自定义标记扩展)。