我希望设置ToggleButton样式以在按下时更改颜色,并保持该颜色直到再次按下。目前,鼠标悬停在按下并且鼠标离开togglebutton后会改变颜色。我带走了鼠标悬停颜色变化,这使我可以将颜色设置为Checked状态,但我不想丢失鼠标悬停效果。有两种方法可以同时拥有吗?我已经创建了自己的扩展器,教我自己创建控件,但无法弄清楚如何同时使用鼠标悬停和按下颜色的statys,我的示例中的mouseover只应在未单击/选中按钮时重置。我正在使用这个ToggleButton样式:http://msdn.microsoft.com/en-us/library/cc296245(v=vs.95).aspx
答案 0 :(得分:2)
This MSDN Link 根据备注部分声明:
ControlTemplate将VisualState对象创建为ControlTemplate中的VisualStateGroup,以指定控件的可视行为。您将相互互斥的状态放在同一个VisualStateGroup中。例如,CheckBox有两个VisualStateGroup对象。一个包含状态,Normal,MouseOver,Pressed和Disabled。另一个包含状态,Checked,UnChecked和Indeterminate。 CheckBox可以同时处于MouseOver和UnChecked状态,但不能同时处于MouseOver和Pressed状态。
我对silverlight相当新,但看起来你必须使用第二个控件,如边框或矩形,不确定这是否是一个选项,但你也可以设置它来更改边框画笔颜色在鼠标上。
答案 1 :(得分:1)
触发器的顺序非常重要。此样式的工作方式与您指定的一样。
<Style x:Key="{x:Type ToggleButton}" TargetType="{x:Type ToggleButton}">
<Setter Property="Foreground" Value="White" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Border Name="Border" BorderThickness="1" Background="Gray" BorderBrush="Gray">
<ContentPresenter Name="ContentHost" Margin="8,3" HorizontalAlignment="Center" VerticalAlignment="Center" RecognizesAccessKey="true" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="Border" Property="Background" Value="Yellow" />
<Setter TargetName="Border" Property="BorderBrush" Value="Yellow" />
</Trigger>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="Border" Property="Background" Value="Red" />
<Setter TargetName="Border" Property="BorderBrush" Value="Red" />
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter TargetName="Border" Property="Background" Value="Green" />
<Setter TargetName="Border" Property="BorderBrush" Value="Green" />
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter TargetName="Border" Property="Opacity" Value="0.25" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>