我想设置 ToggleButton 的样式以在按下时更改颜色,并保持该颜色直到再次按下。目前,鼠标悬停在按下它并且鼠标离开切换按钮后会改变颜色。我取消了鼠标悬停颜色更改,这使我可以将颜色设置为 Checked 状态,但我不想失去鼠标悬停效果。有没有办法两者兼得?我创建了自己的扩展器,自学创建控件,但无法弄清楚如何同时拥有鼠标悬停和按下的颜色,在我的示例中,鼠标悬停应该仅在未单击/检查按钮时重置。我正在处理这种 ToggleButton 样式: http: //msdn.microsoft.com/en-us/library/cc296245 (v=vs.95).aspx
问问题
3188 次
2 回答
2
备注部分下的此 MSDN 链接 声称:
ControlTemplate 将 VisualState 对象创建到 ControlTemplate 中的 VisualStateGroup 以指定控件的视觉行为。您将相互排斥的状态放在同一个 VisualStateGroup 中。例如,CheckBox 有两个 VisualStateGroup 对象。一个包含状态、Normal、MouseOver、Pressed 和 Disabled。另一个包含状态、Checked、UnChecked 和 Indeterminate。CheckBox 可以同时处于 MouseOver 和 UnChecked 状态,但不能同时处于 MouseOver 和 Pressed 状态。
我对silverlight相当陌生,但看起来你必须使用第二个控件,如边框或矩形,不确定这是否是一个选项,但你也可以设置它来更改鼠标上的边框画笔颜色超过。
于 2011-08-03T16:56:23.840 回答
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>
于 2011-08-02T18:16:02.787 回答