Здравствуйте.
Есть у меня компонент который имеет триггеры:
при наведение на элемент один цвет, при выходе с элемента другой. Сделан он как 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 но что-то никак не пойму как мне ресурс получить в нем.
Подскажите, пожалуйста, решений каких-нибудь или хотя бы направления поиска.
Здравствуйте, MxMsk, Вы писали:
MM>Здравствуйте, xakpc, Вы писали:
X>>Есть у меня компонент который имеет триггеры:
X>>при наведение на элемент один цвет, при выходе с элемента другой. Сделан он как ListBox с набором шаблонов.
X>>Данные берутся из XML. Но существует проблема — в XML хранится оригинальный цвет элемента и восстановить его после
X>>Trigger.ExitActions никак не выходит.
MM>Не указывай в "обратной" анимации значение To, и она вернет предыдущий цвет.
Спасибо