C# 从XAML中的动态资源创建项目数组
我想在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
<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/etcresources
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/etcresources
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示例吗?当你定义资源时,它们不是静态的,也不是动态的。静态和动态是使用的机制。请浏览链接了解详细信息。谢谢您的回答。我更新了我的问题,澄清了。我不理解你的第一句话,也不同意你的第二句话。谢谢你的回答。我更新了我的问题,澄清了。我不理解你的第一句话,也不同意你的第二句话。