我想在XAML中创建颜色的数组资源,其中每种颜色都定义为动态资源。我认为可以做到,但是我不知道语法。
我已经尝试过:
<x:Array Type="Color" x:Key="Colors">
<Color>
<DynamicResource ResourceKey="BasicBlueColor" />
</Color>
</x:Array>
但是它不起作用,因为动态资源只能分配给依赖项属性。
这只是行不通,但我认为它很好地描述了我要做什么:
<x:Array Type="Color" x:Key="Colors">
<Color>{DynamicResource BasicRedColor}</Color>
</x:Array>
说明:
编辑2:我对资源定义为静态或动态感到印象深刻,必须按定义使用它们。感谢@Sham向我解释。
答案 0 :(得分:1)
这是不可能的,因为动态资源应该用于从DependencyObject派生的对象中的依赖项属性,但是x:Array不是依赖项对象,这就是错误所在:
'DynamicResourceExtension'不能在'ArrayList'中使用 采集。 “ DynamicResourceExtension”只能在 DependencyObject的DependencyProperty。
答案 1 :(得分:1)
使用ResourceDictionary
放置多个资源。
您可以创建一个名称为“ ApplicationNameColors”的ResourceDictionary
,并在需要时使用这些键。使用前,请不要忘记将其添加到application / windows / etc resources
。
DynamicResource
与您所讨论的机制完全不同。建议您在样式取决于Windows设置时使用DynamicResource
,因为DynamicResource
可能会降低应用程序的性能。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp1">
<SolidColorBrush x:Key="Color1" Color="#555555" />
<SolidColorBrush x:Key="Color2" Color="#555555" />
<SolidColorBrush x:Key="Color3" Color="#555555" />
<SolidColorBrush x:Key="Color4" Color="#555555" />
<SolidColorBrush x:Key="Color5" Color="#555555" />
</ResourceDictionary>
答案 2 :(得分:1)
您可以使用Color
来引用StaticResource
资源。这有效:
<Color x:Key="BasicRedColor">Red</Color>
<Color x:Key="BasicGreenColor">Red</Color>
<x:Array Type="Color" x:Key="Colors">
<StaticResource ResourceKey="BasicRedColor" />
<StaticResource ResourceKey="BasicGreenColor" />
</x:Array>
如果您希望能够在运行时切换颜色,则必须以编程方式替换或修改数组中的Color
对象。
数组是可能包含或可能不包含某些元素的数组。这不是某种依赖对象。