【问题标题】:Create array of items from dynamic resource in XAML从 XAML 中的动态资源创建项目数组
【发布时间】:2018-10-05 08:22:46
【问题描述】:

我想在 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 向我解释。

【问题讨论】:

    标签: c# .net wpf xaml


    【解决方案1】:

    您可以使用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 对象。

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

    【讨论】:

    • 感谢您的回答。我用澄清更新了我的问题。
    • 我不明白你的第一句话,不同意你的第二句话。
    【解决方案2】:

    使用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>
    

    【讨论】:

    • 感谢您的回答。我用澄清更新了我的问题。
    • @kwitee 很好,即使在其他程序集中定义了颜色,您也不需要DynamicResource,因为程序集在编译时是已知的。
    • 颜色在其他程序集中定义为动态资源。我可以将其设为静态吗?
    • @kwitee 你能分享一下这些动态资源的示例 xaml 吗?
    • 资源在定义时不是静态的或动态的。静态和动态是使用的机制。详情请点击链接docs.microsoft.com/en-us/previous-versions/dotnet/…
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 2012-03-22
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      相关资源
      最近更新 更多