从XAML中的动态资源创建项目数组

时间:2018-10-05 08:22:46

标签: c# .net wpf xaml

我想在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>

说明:

  • 我不能在动态资源上使用静态资源,因为颜色是在引用的程序集中定义的,这超出了我的控制范围。
  • 我要创建的资源必须是IList类型。

编辑2:我对资源定义为静态或动态感到印象深刻,必须按定义使用它们。感谢@Sham向我解释。

3 个答案:

答案 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对象。

数组是可能包含或可能不包含某些元素的数组。这不是某种依赖对象。