【问题标题】:Write markup extension as nested element将标记扩展写为嵌套元素
【发布时间】:2013-04-06 02:58:29
【问题描述】:

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

【问题讨论】:

    标签: wpf xaml user-controls resourcedictionary markup-extensions


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-06-24
      • 2021-12-20
      • 2019-06-20
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多