Wpf 将标记扩展写为嵌套元素

Wpf 将标记扩展写为嵌套元素,wpf,xaml,user-controls,resourcedictionary,markup-extensions,Wpf,Xaml,User Controls,Resourcedictionary,Markup Extensions,是否可以将标记扩展写为嵌套元素而不是属性?我试图使用布尔值作为资源字典条目的键 当前代码,其中ResourceDictionary键类型为字符串: <UserControl.Resources> <my:ObjectToResourceConverter x:Key="StatusConverter"> <ResourceDictionary> <BitmapImage x:Key="True" UriSo

是否可以将标记扩展写为嵌套元素而不是属性?我试图使用
布尔值
作为
资源字典
条目的键

当前代码,其中
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:Key
实际上是一个指令,而不是标记扩展。如上所述,
x:Key
在XAML 2006中不支持元素语法。如果您使用XAML2009,它确实如此,但您不太可能(或者不太可能)使用它

但即使您可以这样做,也不会有帮助,因为(在XAML 2006中;XAML 2009可能不同,没有检查)资源字典的键只能使用
string
x:Type
x:Static
设置。因此,对于您的情况,您需要定义一个生成
false
的静态属性,并使用
x:static
将其设置为键

编辑关于仅支持
字符串
x:Type
x:Static
的部分并非完全正确。我太信任编译器错误消息(它说“只支持字符串、类型扩展和静态扩展”)。至少有一个其他受支持的密钥类型:。可能还有更多我忘记或不知道的事情。但在任何情况下,都不支持任意标记扩展(如返回布尔值的自定义标记扩展)

... 
<BitmapImage UriSource="/TestProject;/Resources/Open.png">
    <x:Key>
        <x:Boolean>True</x:Boolean>
    </x:Key>
</BitmapImage>
...