WPF: анимация StaticResource обновляет другие элементы управления, которые используют этот ресурс - PullRequest
3 голосов
/ 01 февраля 2011

У меня есть два TextBox, которые используют один и тот же StaticResource для своего цвета переднего плана.

Когда я применяю анимацию, которая меняет цвет первого TextBox, цвет второго TextBox также изменяется.

Этого не произойдет, если я не использую StaticResource, поэтому я предполагаю, что анимация меняет цвет кисти, определенной в ресурсе, а не цвет переднего плана в первом TextBox.

Вот код, который я использую;

<Page.Resources>
    <SolidColorBrush x:Key="TextBrush"
                     Color="Black" />

    <Storyboard x:Key="Glow"
                TargetProperty="Foreground.Color"
                Storyboard.TargetName="txt1">
        <ColorAnimation To="Blue"
                        Duration="0:0:0.1" />
    </Storyboard>
    <Storyboard x:Key="Normal"
                TargetProperty="Foreground.Color"
                Storyboard.TargetName="txt1">
        <ColorAnimation To="Yellow"
                        Duration="0:0:0.1" />
    </Storyboard>
</Page.Resources>

<StackPanel>
    <StackPanel.Triggers>
        <EventTrigger RoutedEvent="StackPanel.MouseEnter">
            <BeginStoryboard Storyboard="{StaticResource Glow}" />
        </EventTrigger>
        <EventTrigger RoutedEvent="StackPanel.MouseLeave">
            <BeginStoryboard Storyboard="{StaticResource Normal}" />
        </EventTrigger>
    </StackPanel.Triggers>

    <TextBlock Name="txt1"
               Foreground="{StaticResource TextBrush}">Text One</TextBlock>
    <TextBlock Name="txt2"
               Foreground="{StaticResource TextBrush}">Text Two</TextBlock>
</StackPanel>

Есть ли что-нибудь вокруг этого?

Мэтт

1 Ответ

3 голосов
/ 01 февраля 2011

Используя один StaticResource в привязке, изменение Foreground в вашей анимации изменит сам ресурс.Такое поведение разработано специально, так как для всего остального потребуются полные копии ресурсов, что значительно снизит полезность и преимущества использования StaticResource.

Простой обходной путь, конечно,не использовать StaticResource здесь или использовать отдельный ресурс для TextBox.

...