Как анимировать Непрозрачность DropShadowEffect?

Все подклассы всегда могут указывать своего собственного конструктора, пока они вызывают конструктора суперкласса - таким образом, нет никакого способа вынудить класс иметь определенного конструктора (По крайней мере, который является способом, которым он работает в Java). Вы видели использования шаблона "фабрика", получит Вас где-нибудь - Вы могли определить метод фабрики в интерфейсе - но Вам будет нужен отдельный класс фабрики, поскольку Ваш абстрактный базовый класс не знает фактический класс объекта, который должен быть создан.

Однако: возможно, добавляя более конкретный пример проблемы Вы имеете, мог бы запросить другие/лучше ответы. Вы ищете некоторый универсальный код инстанцирования, или Вы обеспокоены, что определенные настройки на абстрактном базовом классе должны быть сделаны?

, Если Вы просто обеспокоены инициализацией, которая должна быть сделана абстрактным классом, создать метод, чтобы сделать так и зарегистрировать использование того метода.

6
задан qJake 1 October 2014 в 14:48
поделиться

1 ответ

Несколько замечаний

1) Вы должны быть нацелены на фактическое свойство Border - вы фактически пытаетесь нацелить значение (DropShadowEffect) свойства Effect, а не само свойство.

2) Вам необходимо отсортировать синтаксис PropertyPath .

Измените свойство Storyboard.Target на следующее, и все будет в порядке:

Storyboard.TargetProperty="(Effect).Opacity"

EDIT Рабочий код, как указано в комментарии:

<Border BorderThickness="10" Height="100" Width="100">
    <Border.BorderBrush>
        <SolidColorBrush Color="Red"></SolidColorBrush>
    </Border.BorderBrush>
    <Border.Style>
        <Style TargetType="Border">
            <Style.Resources>
                <Storyboard x:Key="GlowOn">
                    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" 
                          Storyboard.TargetProperty="(Effect).Opacity">
                        <SplineDoubleKeyFrame KeyTime="0:0:0.3" Value="1"/>
                    </DoubleAnimationUsingKeyFrames>
                </Storyboard>
                <Storyboard x:Key="GlowOff">
                    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" 
                          Storyboard.TargetProperty="(Effect).Opacity">
                        <SplineDoubleKeyFrame KeyTime="0:0:0.3" Value="0"/>
                    </DoubleAnimationUsingKeyFrames>
                </Storyboard>
            </Style.Resources>

            <Setter Property="CornerRadius" Value="6,1,6,1" />
        <!--<Setter Property="BorderBrush"
                    Value="{StaticResource SelectedBorder}" />-->
            <Setter Property="BorderThickness" Value="1" />
        <!--<Setter Property="Background"
                    Value="{StaticResource DeselectedBackground}" />-->
            <Setter Property="RenderTransformOrigin" Value="0.5,0.5" />
        <!--<Setter Property="TextBlock.Foreground"
                    Value="{StaticResource SelectedForeground}" />-->

            <Setter Property="RenderTransform">
                <Setter.Value>
                    <RotateTransform Angle="90"/>
                </Setter.Value>
            </Setter>

            <Setter Property="Effect">
                <Setter.Value>
                    <DropShadowEffect ShadowDepth="20"
                                      BlurRadius="8"
                                      Color="#FFB0E9EF"/>
                </Setter.Value>
            </Setter>

            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">

                    <Trigger.EnterActions>
                        <BeginStoryboard
                              Storyboard="{StaticResource GlowOn}"/>
                    </Trigger.EnterActions>

                    <Trigger.ExitActions>
                        <BeginStoryboard
                              Storyboard="{StaticResource GlowOff}"/>
                    </Trigger.ExitActions>

                </Trigger>
            </Style.Triggers>

        </Style>
    </Border.Style>
</Border>
7
ответ дан 11 December 2019 в 00:40
поделиться
Другие вопросы по тегам:

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