2013-04-22 4 views
1

Я пытаюсь управлять ресурсами в своем приложении Silverlight 5, построенном в VS2012. Что касается тематики, я вытащил все цветовые коды в разных пользовательских шаблонах и переместил их в отдельный файл ресурсов, чтобы их можно было изменять независимо от основных шаблонов.Silverlight - Управление цветовыми ресурсами - ошибки

Я объявил их следующим образом:

<Color x:Name="ButtonForeground">#FFFFFF</Color> 
<Color x:Name="ButtonBackground">#004760</Color> 
<Color x:Name="ButtonAltBackground">#0089B7</Color> 

Хотя это строит и работает нормально, каждая из этих линий имеет две «ошибки», которые приходят каждый раз, когда я строю проект:

  • Невозможно добавить контент к объекту типа «Цвет»
  • Ошибка синтаксиса TypeConverter при обработке строки инициализации «#ColorCode». Атрибуты элемента не допускаются к объектам, созданным с помощью TypeConverter.

С учетом 30 цветов у меня есть 60 ошибок сборки в окне списка ошибок, хотя проект строит и работает нормально, и это отвлекает от реальных ошибок, когда они появляются.

Это также влияет на то, что мой цвет ResourceDictionary не включен, поскольку они не могут найти файл темы с цветами и потому, что словари, которые зависят от них, не работают, m не может ссылаться на них по очереди, поэтому ни один из моих шаблонов не найден. (Это приводит к еще 100 ошибкам, которые не останавливают создание и запуск приложения)

Может ли кто-нибудь объяснить мне, почему эти ошибки здесь, и что мне нужно сделать, чтобы они ушли?

Обновление: Я попытался также, используя следующий подход, который не имеет никаких проблем с XAML и работает, насколько словари ресурсов обеспокоены, но бросает исключение во время выполнения:

<Color x:Name="ButtonForeground" R="255" G="255" B="255"><!--#FFFFFF--></Color> 
<Color x:Name="ButtonBackground" R="0" G="71" B="96"><!--#004760--></Color> 
<Color x:Name="ButtonAltBackground" R="0" G="137" B="183"><!--#0089B7--></Color> 

Это выглядит быть связанными с ошибкой, опубликованной здесь: Silverlight XAML BUG

Обновление 2: Я пробовал следующие два подхода: оба работают, но закомментированная версия вызывает ошибки, и я удалил ее по этой причине.

<VisualState x:Name="Normal"> 
<Storyboard> 
    <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Background" Storyboard.TargetName="BtnBorder"> 
     <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ButtonBackgroundBrush}"/> 
    </ObjectAnimationUsingKeyFrames> 
    <!--<ColorAnimation Duration="0:0:0.1" To="{StaticResource ButtonBackgroundColor}" Storyboard.TargetProperty="Color" Storyboard.TargetName="RbBorderBackground"/>--> 
</Storyboard> 

Живых раздел прямо указывает на объект границы и использует это свойство Brush, то закомментирована версия указывает на кисти, используемой границы, и использует свойство Color. Прокомментированная версия анимирует гладко и выглядит хорошо, текущая версия просто меняет кисть сразу.

Благодаря

Тристан

ответ

1

Вы должны пользователем х: Key, а не х: Название для ресурсов. Ошибка преобразования возникает, если у вас есть атрибут x: Name, но не x: Key.

<Color x:Key="ButtonForeground">#FFFFFFFF</Color> 

x:Key используется для идентификации ресурсов в пределах ResourceDictionary, тогда как x:Name используется для имен элементов (сетка, элементы управления и т.д.) ...

+0

Arg. Полная ошибка новичка :( – Tristan

+0

Хорошая вещь о том, чтобы делать ошибки, заключается в том, что вы учитесь у них: D – Tonio