Как я связываю с цветом в WPF ColorAnimation?

Я хотел бы сделать что-то, что по-видимому довольно просто, но я не могу выяснить, как сделать это. У меня есть ColorAnimation, который инициирован, когда Событие MouseEnter происходит. Это просто изменяет цвет фона Границы от одного цвета до другого цвета.

К сожалению, я не могу выяснить, как поместить что-либо кроме цветов hardcoded в этот ColorAnimation. Таким образом, это в настоящее время походит на это:

<Style x:Key="MouseOverStyle">
<Style.Triggers>
    <EventTrigger RoutedEvent="Mouse.MouseEnter">
        <EventTrigger.Actions>
            <BeginStoryboard>
                <Storyboard>
                    <ColorAnimation Duration="0:0:0.5" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
                                    To="Red" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger.Actions>
    </EventTrigger>
</Style.Triggers>
</Style>

Однако я хотел бы, делают что-то любой как это:

<SolidColorBrush x:Key="MyEventColor" Color="{Binding EventColor}" />

<Style x:Key="MouseOverStyle">
<Style.Triggers>
    <EventTrigger RoutedEvent="Mouse.MouseEnter">
        <EventTrigger.Actions>
            <BeginStoryboard>
                <Storyboard>
                    <ColorAnimation Duration="0:0:0.5" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
                                    To="{StaticResource MyEventColor}" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger.Actions>
    </EventTrigger>
</Style.Triggers>
</Style>

Или как это:

<Style x:Key="MouseOverStyle">
<Style.Triggers>
    <EventTrigger RoutedEvent="Mouse.MouseEnter">
        <EventTrigger.Actions>
            <BeginStoryboard>
                <Storyboard>
                    <ColorAnimation Duration="0:0:0.5" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
                                    To="{Binding EventColor}" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger.Actions>
    </EventTrigger>
</Style.Triggers>
</Style>

Когда я пытаюсь сделать любого из тех, исключение выдается. Для первого это выдает исключение, говоря мне по существу, что свойство "Color" не может принять значение SolidColorBrush..., которое имеет смысл..., но это, конечно, не выручает меня, потому что ColorAnimation не позволит мне анимировать" (Граница. Фон). (SolidColorBrush)" свойство... это только позволит мне анимировать" (Граница. Фон). (SolidColorBrush. Цвет)" свойство....

Исключение на втором примере в основном говорит мне, что "Не может заморозить это дерево временной шкалы Раскадровки для использования через потоки"..., таким образом, это кажется, что ColorAnimation пытается сделать эту привязку в некотором другом потоке, чем поток UI или что-то? Независимо от того, что это пытается сделать..., это не работает.

Как, черт возьми, я могу сделать такую простую задачу?

5
задан David 7 June 2010 в 21:21
поделиться

1 ответ

Для первого варианта вы можете использовать {StaticResource MyColor} с MyColor, определенным следующим образом:

<Color x:Key="MyColor">#FF00FF00</Color>

Однако это не решает вашу проблему: вы не можете привязать свойства анимации, поскольку эти свойства должны быть заморожены (неизменны), чтобы анимация работала. Либо попробуйте устранить зависимость от привязки, либо воссоздайте раскадровку с правильным цветом из кода за тем, как цвет меняется.

7
ответ дан 14 December 2019 в 08:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: