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>
...