Все подклассы всегда могут указывать своего собственного конструктора, пока они вызывают конструктора суперкласса - таким образом, нет никакого способа вынудить класс иметь определенного конструктора (По крайней мере, который является способом, которым он работает в Java). Вы видели использования шаблона "фабрика", получит Вас где-нибудь - Вы могли определить метод фабрики в интерфейсе - но Вам будет нужен отдельный класс фабрики, поскольку Ваш абстрактный базовый класс не знает фактический класс объекта, который должен быть создан.
Однако: возможно, добавляя более конкретный пример проблемы Вы имеете, мог бы запросить другие/лучше ответы. Вы ищете некоторый универсальный код инстанцирования, или Вы обеспокоены, что определенные настройки на абстрактном базовом классе должны быть сделаны?
, Если Вы просто обеспокоены инициализацией, которая должна быть сделана абстрактным классом, создать метод, чтобы сделать так и зарегистрировать использование того метода.
Несколько замечаний
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>