Создать массив элементов из динамического ресурса в XAML - PullRequest
0 голосов
/ 05 октября 2018

Я хочу создать массив цветов в 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 голосов
/ 05 октября 2018

Используйте ResourceDictionary для размещения нескольких ресурсов.

Вы можете создать один ResourceDictionary с именем «ApplicationNameColors» и использовать эти ключи везде, где это необходимо.Не забудьте добавить это в application / windows / etc resources перед использованием.

DynamicResource - это совершенно другой механизм, чем те, о которых вы говорите.Рекомендуется использовать DynamicResource, когда ваш стиль зависит от настроек Windows, поскольку 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>
0 голосов
/ 05 октября 2018

Вы можете ссылаться на ресурсы 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 в массиве программно.

Массивмассив, который может содержать или не содержать некоторые элементыЭто не какой-то объект зависимости.

0 голосов
/ 05 октября 2018

Это невозможно, поскольку динамический ресурс должен использоваться для свойства зависимости в объектах, производных от DependencyObject, но x: Array не является объектом зависимости, это то, что говорит ошибка:

«DynamicResourceExtension» не можетиспользоваться в коллекции ArrayList.«DynamicResourceExtension» можно установить только для свойства DependencyProperty объекта DependencyObject.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...