WPF RepeatButton с нажатым VisualState
1) моё визуальное состояние кнопки повтора - это прямоугольник, который при нажатии на Stroke идет от прозрачного к серому,
это визуальное изменение состояния происходит только один раз при нажатии,
Так как это кнопка повтора, я бы хотел, чтобы изменение визуального состояния происходило (например, мигание нажималось) снова и снова при нажатии, как я мог изменить свое визуальное состояние, чтобы получить такой эффект?
<ControlTemplate TargetType="{x:Type RepeatButton}">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0" To="Pressed"/>
</VisualStateGroup.Transitions>
<VisualState x:Name="Pressed">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Stroke).(SolidColorBrush.Color)" Storyboard.TargetName="rectangle">
<EasingColorKeyFrame KeyTime="0" Value="#FF8F8E8E" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Rectangle x:Name="rectangle" HorizontalAlignment="Stretch" Stroke="Transparent" Fill="Transparent" VerticalAlignment="Stretch" />
</Grid>
</ControlTemplate>
2) Один из подходов, который я имел в виду, - это использовать GoToStateAction с событием EventTrigger on Click (так как кнопка "Повтор" запускает это событие снова и снова),
но я не могу разместить GoToStateAction непосредственно на ControlTemplate, и мне не повезло, поместив его под и EventTrigger под ControlTemplate .
Итак, в заключение я получил 2 вопроса:
1) Общая идея, как решить эту проблему.
2) Моя идея требует, чтобы я поместил GoToStateAction на объект ControlTemplate, кажется, что это невозможно, есть идеи, как обойти это?
заранее спасибо.
1 ответ
Попробуйте использовать триггеры вместо визуальных состояний
<ControlTemplate TargetType="{x:Type RepeatButton}">
<ControlTemplate.Resources>
<Storyboard x:Key="repeatSb" AutoReverse="True" RepeatBehavior="Forever">
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Stroke).(SolidColorBrush.Color)" Storyboard.TargetName="rectangle">
<EasingColorKeyFrame KeyTime="0" Value="Red" />
<EasingColorKeyFrame KeyTime="0:0:0.5" Value="Transparent"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</ControlTemplate.Resources>
<Grid>
<Rectangle x:Name="rectangle" HorizontalAlignment="Stretch"
Stroke="Transparent" Fill="#FFFBD0D0" VerticalAlignment="Stretch" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Trigger.EnterActions>
<BeginStoryboard x:Name="repeatSb_BeginStoryboard"
Storyboard="{StaticResource repeatSb}"/>
</Trigger.EnterActions>
</Trigger>
<Trigger Property="IsPressed" Value="False">
<Trigger.EnterActions>
<StopStoryboard BeginStoryboardName="repeatSb_BeginStoryboard"/>
</Trigger.EnterActions>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>