Мне нужен флажок, который невидим в своем непроверенном состоянии. Если флажок снят, при наведении курсора мыши он будет анимирован с прозрачностью 0,3.
Когда указатель мыши покидает флажок, и если он по-прежнему не отмечен, он возвращает 0 прозрачности.
Если этот флажок установлен, он будет полностью видимым, т.е. прозрачность = 1.
Все мои попытки до сих пор были безуспешными, я думаю из-за правила наведения мыши. Когда мой флажок становится установленным, при наведении курсора мыши по-прежнему происходит снижение до 0,3, а при отпускании мыши он становится невидимым.
Я пытался использовать триггеры, мультитриггеры, VSM, но я не могу понять, как кодировать поведение, которое я хочу, без конфликтов.
Код:
Вот подход Триггеры. Он прошел через столько итераций, что даже не помню, был ли это мой первоначальный подход.
У меня также есть подход VSM, просто скажите, если вы хотите, чтобы код для этого тоже.
Шаблон управления (Я взял образец, предоставленный в MSDN, и просто изменил его)
<Style x:Key="{x:Type CheckBox}"
TargetType="{x:Type CheckBox}">
<Setter Property="SnapsToDevicePixels"
Value="true" />
<Setter Property="OverridesDefaultStyle"
Value="true" />
<Setter Property="FocusVisualStyle"
Value="{DynamicResource CheckBoxFocusVisual}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type CheckBox}">
<BulletDecorator Background="Transparent">
<BulletDecorator.Bullet>
<Border x:Name="Border"
Width="80"
Height="80"
CornerRadius="0"
BorderThickness="1">
<Grid>
<Path Visibility="Visible"
Width="100"
Height="100"
x:Name="CheckBorder"
SnapsToDevicePixels="False"
StrokeThickness="9"
Opacity="0"
Data="M 0 30 C 2,29 10,30 14,39 M 15,40 C 5,31 55,10 45,20 ">
<Path.Stroke>
<SolidColorBrush Color="Black" />
</Path.Stroke>
</Path>
<Path Visibility="Visible"
Width="100"
Height="100"
x:Name="CheckMark"
Opacity="0"
SnapsToDevicePixels="False"
StrokeThickness="6"
Data="M 1 30 C 2,29 10,30 14,39 M 15,39 C 5,31 55,10 45,20 ">
<Path.Stroke>
<SolidColorBrush Color="#FF0C9D0C" />
</Path.Stroke>
</Path>
<Path Visibility="Collapsed"
Width="100"
Height="100"
x:Name="InderminateMark"
SnapsToDevicePixels="False"
StrokeThickness="5"
Data="M 0 0 L 50 50">
<Path.Stroke>
<SolidColorBrush Color="{DynamicResource GlyphColor}" />
</Path.Stroke>
</Path>
</Grid>
</Border>
</BulletDecorator.Bullet>
</BulletDecorator>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" Storyboard.TargetName="CheckBorder" To="0.3" Duration="0:0:0.1"/>
<DoubleAnimation Storyboard.TargetProperty="Opacity" Storyboard.TargetName="CheckMark" To="0.3" Duration="0:0:0.1"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" Storyboard.TargetName="CheckBorder" To="0" Duration="0:0:0.1"/>
<DoubleAnimation Storyboard.TargetProperty="Opacity" Storyboard.TargetName="CheckMark" To="0" Duration="0:0:0.1"/>
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Opacity" TargetName="CheckBorder" Value="1"/>
<Setter Property="Opacity" TargetName="CheckMark" Value="1"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Декларация
<CheckBox Width="100" Height="100">Hello</CheckBox>