Что не так со следующим ControlTemplate, почему он не может найти именованную кисть? Я всегда получаю сообщение об ошибке. Не удается найти цель триггера «stateBrush». В моем шаблоне я начинаю анимировать фон, когда состояние меняется на WaitForActive, и я хочу установить его зеленым, когда состояние меняется на Active. Довольно просто Мой подход как-то несовершенен?
Также действительно необходимо удалить старую раскадровку при изменении состояния. После многих изменений состояния не будет ли создано много раскадровок?
<Style TargetType="{x:Type local:GateControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:GateControl}">
<Grid ClipToBounds="True" x:Name="rootLayout">
<Grid.Background>
<SolidColorBrush x:Name="stateBrush"/>
</Grid.Background>
<Rectangle Stroke="{TemplateBinding StrokeBrush}"
StrokeThickness="{TemplateBinding StrokeThickness}">
<Rectangle.Fill>
<LinearGradientBrush EndPoint="1,1" StartPoint="0,0">
<GradientStop Color="#AA111111" Offset="0"/>
<GradientStop Color="#AA111111" Offset="1"/>
<GradientStop Color="Transparent" Offset="0.5"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<local:Cross StrokeBrush="{TemplateBinding StrokeBrush}"
StrokeThickness="{TemplateBinding StrokeThickness}" />
</Grid>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding Path=State, RelativeSource={RelativeSource Self}}" Value="WaitForActive">
<DataTrigger.EnterActions>
<BeginStoryboard x:Name="waitForActiveStoryboard">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetName="stateBrush" Storyboard.TargetProperty="Color"
FillBehavior="HoldEnd"
RepeatBehavior="Forever"
AutoReverse="True">
<ColorAnimationUsingKeyFrames.KeyFrames>
<LinearColorKeyFrame KeyTime="00:00:00" Value="Green"/>
<LinearColorKeyFrame KeyTime="00:00:0.25" Value="Green"/>
<LinearColorKeyFrame KeyTime="00:00:0.5" Value="Yellow" />
<LinearColorKeyFrame KeyTime="00:00:0.75" Value="Yellow" />
</ColorAnimationUsingKeyFrames.KeyFrames>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="waitForActiveStoryboard" />
</DataTrigger.ExitActions>
</DataTrigger>
<DataTrigger Binding="{Binding Path=State, RelativeSource={RelativeSource Self}}" Value="Active">
<Setter TargetName="stateBrush" Property="Color" Value="Green" />
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>