Как избежать применения Coloranimation в ControlTemplate к каждому объекту с помощью шаблона - PullRequest
0 голосов
/ 08 февраля 2019

Я объявил ColorAnimations внутри ControlTemplate стиля.

Что он должен делать:

Всякий раз, когда мышь наводит курсор на объект, цвет этого конкретного объекта должен быть анимированным.

Что он делает вместо этого:

Анимация цвета КАЖДОГО объекта, к которому применяется стиль, всякий раз, когда я наводю курсор на один из них, даже если свойство, активирующее анимацию, изменяется не на всех объектах.

То, что я пробовал раньше:

Я пытался использовать Eventrigger вместо обычного триггера, но проблема сохраняется.Я также попытался использовать свойство «Имя», а не «x: Имя», но это тоже не помогло.Также не с использованием Storyboard.TargetName, а с Storyboard.Target и использованием привязки с RelativeSource, чтобы он мог найти объект ... и все же каждый объект, использующий этот стиль, анимируется всякий раз, когда я наводю указатель мыши на любой из них

Он работает как задуманоесли я использую Setters для изменения фона вместо раскадровки и ColorAnimations.

Стиль

<Style x:Key="Fraction_ScrollViewer_ScrollBar_Thumb" TargetType="{x:Type Thumb}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Thumb}">
                <Border
                    x:Name="Border"
                    CornerRadius="5"
                    Background="{TemplateBinding Background}"
                    BorderThickness="0" />

                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Trigger.EnterActions>
                            <BeginStoryboard
                                Name="IsMouseOver_True"
                                HandoffBehavior="Compose">
                                <Storyboard>
                                    <ColorAnimation
                                        Storyboard.TargetName="Border"
                                        Storyboard.TargetProperty="Background.(SolidColorBrush.Color)"
                                        To="{StaticResource 'Color_CoolGrey'}"
                                        Duration="0:0:0.2" />
                                </Storyboard>
                            </BeginStoryboard>
                        </Trigger.EnterActions>

                        <Trigger.ExitActions>
                            <BeginStoryboard
                                Name="IsMouseOver_False">
                                <Storyboard>
                                    <ColorAnimation
                                        Storyboard.TargetName="Border"
                                        Storyboard.TargetProperty="Background.(SolidColorBrush.Color)"
                                        To="{StaticResource 'Color_MidGrey'}"
                                        Duration="0:0:0.2" />
                                </Storyboard>
                            </BeginStoryboard>
                        </Trigger.ExitActions>
                    </Trigger>

Стиль Thumb используется в стиле полосы прокрутки, которая используется в ScrollViewer.Стиль Scrollviewer Style затем используется в 2 местах:

1:

<Style x:Key="LabelTreeView" TargetType="{x:Type TreeView}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TreeView}">
                <ScrollViewer
                    Style="{StaticResource ScrollViewer}"
                    Focusable="False"
                    CanContentScroll="False"
                    Padding="4">

                    <ItemsPresenter />

                </ScrollViewer>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

2:

<ScrollViewer
                    Style="{StaticResource ScrollViewer}"
                    HorizontalScrollBarVisibility="Disabled"
                    VerticalScrollBarVisibility="Auto">
                    <ItemsControl
                        BorderThickness="0"
                        Background="{StaticResource Brush_Transparent}"
                        ItemTemplate="{StaticResource CharacterSequenceChar}"
                        ItemsSource="{Binding DisplayedCharacterSequenceCharacters}">

                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <WrapPanel />
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>
                    </ItemsControl>
                </ScrollViewer>

Что вызывает такое поведение и как его избежать при неподвижномиспользуя анимацию?

1 Ответ

0 голосов
/ 08 февраля 2019

Очевидно, что все кнопки совместно используют один и тот же экземпляр Brush в свойстве Background.

Вы можете явно назначить отдельную кисть для каждой границы в шаблоне:

<Border x:Name="Border" ...>
    <Border.Background>
        <SolidColorBrush Color="{Binding Background.Color,
                                 RelativeSource={RelativeSource TemplatedParent}}"/>
    </Border.Background>
</Border>
...