[WPF] Биндинг цвета SolidColorBrush в Storyboard
От: xakpc Россия linkedin.com/in/xakpc
Дата: 24.05.11 09:08
Оценка:
Здравствуйте.

Есть у меня компонент который имеет триггеры:
при наведение на элемент один цвет, при выходе с элемента другой. Сделан он как ListBox с набором шаблонов.
Данные берутся из XML. Но существует проблема — в XML хранится оригинальный цвет элемента и восстановить его после
Trigger.ExitActions никак не выходит.

Немного кода:

Кисточка элемента
<SolidColorBrush x:Key="NormalBrush" Color="{Binding Mode=OneWay, XPath=@Color}" />

Начальное раскрашивание элемента
...
<Path.Fill>
<SolidColorBrush Color="{Binding Mode=OneWay, XPath=@Color}" x:Name="fillColor"/>
</Path.Fill>
...

Trigger.EnterActions
<Trigger.EnterActions>
 <BeginStoryboard>
  <Storyboard>
   ...                                           
   <ColorAnimation Storyboard.TargetName="fillColor" Storyboard.TargetProperty="Color" To="Gold" Duration="00:00:00.3"/>
  </Storyboard>
 </BeginStoryboard>
</Trigger.EnterActions>

Trigger.ExitActions где собственно проблема
<Trigger.ExitActions>
 <BeginStoryboard>
  <Storyboard>
   ...
   <ColorAnimation Storyboard.TargetName="fillColor" Storyboard.TargetProperty="Color" To="Red" Duration="00:00:00.3"/>
  </Storyboard>
 </BeginStoryboard>
</Trigger.ExitActions>

Как известно любому кто работал со Storyboard'ами попытка прямого бинда
..
 <ColorAnimation Storyboard.TargetName="fillColor" Storyboard.TargetProperty="Color" To="{Binding Mode=OneWay, XPath=@Color}" Duration="00:00:00.3"/>
...

приводит к исключению

Cannot freeze this Storyboard timeline tree for use across threads.


Необходимо делать бинд к статичным ресурсам, например так
<Color x:Key="RedColor">Red</Color>
...
<ColorAnimation Storyboard.TargetName="fillColor" Storyboard.TargetProperty="Color" To="{StaticResource RedColor}" Duration="00:00:00.3"/>
...

Однако это код так же бесполезен как и самый первый — я не могу сделать бинд Color'а, или не знаю как?

Попытка использования SolidColorBrush с конвертером ни к чему не привела — тот же фриз.
<local:SolidBrushToColorValueConverter  x:Key="SolidBrushToColorValueConverter_ValueConverter"/>
...
<ColorAnimation Storyboard.TargetName="fillColor" Storyboard.TargetProperty="Color" To="{Binding Source={StaticResource NormalBrush}, Converter={StaticResource SolidBrushToColorValueConverter_ValueConverter}}" Duration="00:00:00.3"/>
...

Честно говоря мыслей у меня больше нет. Я пробовал переопределить StaticResourceExtension но что-то никак не пойму как мне ресурс получить в нем.
Подскажите, пожалуйста, решений каких-нибудь или хотя бы направления поиска.
binding freeze stroyboard
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.