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

C# 从XAML中的动态资源创建项目数组,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,我想在XAML中创建一个颜色数组资源,其中每个颜色都被定义为一个动态资源。我认为这是可以做到的,但我不明白语法 我试过这个: <x:Array Type="Color" x:Key="Colors"> <Color> <DynamicResource ResourceKey="BasicBlueColor" /> </Color> </x:Array> 但它不起作用,因为动态资源只能分配给depen

我想在XAML中创建一个颜色数组资源,其中每个颜色都被定义为一个动态资源。我认为这是可以做到的,但我不明白语法

我试过这个:

<x:Array Type="Color" x:Key="Colors">
    <Color>
        <DynamicResource ResourceKey="BasicBlueColor" />
    </Color>
</x:Array>

但它不起作用,因为动态资源只能分配给dependency属性

这根本不起作用,但我认为它很好地描述了我正在尝试做的事情:

<x:Array Type="Color" x:Key="Colors">
    <Color>{DynamicResource BasicRedColor}</Color>
</x:Array>

{DynamicResource BasicRedColor}
澄清:

  • 我不能使用静态资源而不是动态资源,因为颜色是在我无法控制的引用程序集中定义的
  • 我试图创建的资源必须是IList类型

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

这是不可能的,因为从DependencyObject派生的对象中的dependency属性应该使用dynamic resource,但是x:Array不是DependencyObject,这是错误所说的:

“DynamicResourceExtension”不能在“ArrayList”中使用 收集“DynamicResourceExtension”只能在上设置 DependencyObject的DependencyProperty


这是不可能的,因为动态资源应该用于从DependencyObject派生的对象中的dependency属性,但是x:Array不是DependencyObject,这是错误所说的:

“DynamicResourceExtension”不能在“ArrayList”中使用 收集“DynamicResourceExtension”只能在上设置 DependencyObject的DependencyProperty


使用
ResourceDictionary
放置多个资源

您可以创建一个名为“ApplicationNameColor”的
ResourceDictionary
,并在需要时使用这些键。在使用之前,不要忘记将其添加到应用程序/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>

使用
ResourceDictionary
放置多个资源

您可以创建一个名为“ApplicationNameColor”的
ResourceDictionary
,并在需要时使用这些键。在使用之前,不要忘记将其添加到应用程序/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>

您可以使用
StaticResource
引用
Color
资源。这项工作:

<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
对象


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

您可以使用
StaticResource
引用
Color
资源。这项工作:

<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
对象


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

谢谢您的回答。我更新了我的问题并进行了澄清。@Kwite Nice,您不需要
DynamicSource
,即使颜色在其他程序集中定义,因为程序集在编译时是已知的。颜色在其他程序集中定义为动态资源。我可以把它设为静态的吗?@kwitee你可以分享这些动态资源的xaml示例吗?当你定义资源时,它们不是静态的,也不是动态的。静态和动态是使用的机制。请浏览链接了解详细信息。谢谢您的回答。我更新了我的问题并进行了澄清。@Kwite Nice,您不需要
DynamicSource
,即使颜色在其他程序集中定义,因为程序集在编译时是已知的。颜色在其他程序集中定义为动态资源。我可以把它设为静态的吗?@kwitee你可以分享这些动态资源的xaml示例吗?当你定义资源时,它们不是静态的,也不是动态的。静态和动态是使用的机制。请浏览链接了解详细信息。谢谢您的回答。我更新了我的问题,澄清了。我不理解你的第一句话,也不同意你的第二句话。谢谢你的回答。我更新了我的问题,澄清了。我不理解你的第一句话,也不同意你的第二句话。