У меня есть набор флажков, которые были стилизованы под переключатели и используются для выбора или отмены выбора пользователей в сети, которые хочет включить текущий пользователь. Эти флажки можно отключить или включить во время выполнения в зависимости от того, доступен пользователь или нет.
Чтобы визуализировать все это, я создал стиль с визуальным менеджером состояний, который имеет 2 VisualStateGroups, один для обработки проверок и снятий отметок и один для обработки отключенного состояния. Это все работает нормально, когда флажок отключен, а затем снова включен. Но во второй раз, когда я отключаю флажок, он остается застрявшим в своем непроверенном стиле.
Я пробовал решения, предлагаемые в Проверено VisualState не запускается после повторного включения RadioButton и первого ответа от него Как сохранить статус ToggleButton после повторного включения , но у меня все та же проблема. Кроме того, первое решение сделало его более уродливым, поэтому я снова изменил его.
Мой VisualStateManager:
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CheckStates">
<VisualState x:Name="Checked">
<Storyboard>
<DoubleAnimationUsingPath
Storyboard.TargetName="ellipseAnim"
Storyboard.TargetProperty="X"
PathGeometry="{StaticResource pathCheck}"
Source="X"
Duration="00:00:00.1" />
<ObjectAnimationUsingKeyFrames
Storyboard.TargetName="grid"
Storyboard.TargetProperty="Background">
<DiscreteObjectKeyFrame KeyTime="00:00:00.05" Value="{StaticResource checkBrush}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames
Storyboard.TargetName="toggleBall"
Storyboard.TargetProperty="Fill">
<DiscreteObjectKeyFrame KeyTime="00:00:00.1" Value="{StaticResource XVR30}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames
Storyboard.TargetName="Border"
Storyboard.TargetProperty="Background">
<DiscreteObjectKeyFrame KeyTime="00:00:00.1" Value="{StaticResource XVR220}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Unchecked" >
<Storyboard x:Name="Uncheck">
<DoubleAnimationUsingPath
Storyboard.TargetName="ellipseAnim"
Storyboard.TargetProperty="X"
PathGeometry="{StaticResource pathUncheck}"
Source="X"
Duration="00:00:00.1" />
</Storyboard>
</VisualState>
<VisualState x:Name="Indeterminate">
<Storyboard>
<DoubleAnimationUsingKeyFrames
BeginTime="0:0:0"
Storyboard.TargetName="toggleBall"
Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)" >
<SplineDoubleKeyFrame KeyTime="00:00:00.5" Value="-15" />
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="DisabledStates">
<VisualState x:Name="Disabled">
<Storyboard>
<ObjectAnimationUsingKeyFrames
Storyboard.TargetName="toggleBall"
Storyboard.TargetProperty="Fill">
<DiscreteObjectKeyFrame KeyTime="00:00:00.1" Value="{StaticResource XVR90}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>