ToggleButton MouseOver检查按下的问题

时间:2011-08-02 17:55:17

标签: silverlight togglebutton

我希望设置ToggleButton样式以在按下时更改颜色,并保持该颜色直到再次按下。目前,鼠标悬停在按下并且鼠标离开togglebutton后会改变颜色。我带走了鼠标悬停颜色变化,这使我可以将颜色设置为Checked状态,但我不想丢失鼠标悬停效果。有两种方法可以同时拥有吗?我已经创建了自己的扩展器,教我自己创建控件,但无法弄清楚如何同时使用鼠标悬停和按下颜色的statys,我的示例中的mouseover只应在未单击/选中按钮时重置。我正在使用这个ToggleButton样式:http://msdn.microsoft.com/en-us/library/cc296245(v=vs.95).aspx

2 个答案:

答案 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>