2

是否可以将标记扩展编写为嵌套元素而不是属性?我正在尝试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:Key

XAML

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

1 回答 1

3

好吧,是的,您通常可以使用元素语法声明标记扩展,但x:Key实际上是指令,而不是标记扩展。如此处所述,x:Key不支持 XAML 2006 中的元素语法。如果您使用 XAML 2009,它支持,但您不太可能(或想要)。

但即使你可以这样做,它也无济于事,因为(在 XAML 2006 中;XAML 2009 可能不同,未检查)资源字典的键只能使用 stringx:Typex:Static. 因此,对于您的情况,您需要定义一个产生 的静态属性false,并将其设置为使用x:Static.

编辑仅支持string,x:Type和的x:Static部分并不完全正确。我太相信编译器错误消息(上面写着“仅支持 String、TypeExtension 和 StaticExtension。”)。至少有一种其他受支持的密钥类型:ComponentResourceKey。可能还有更多我忘记了或我不知道的。但无论如何,不​​支持任意标记扩展(如返回布尔值的自定义标记扩展)。

于 2013-04-06T03:19:20.960 回答