0

我想设置 ToggleButton 的样式以在按下时更改颜色,并保持该颜色直到再次按下。目前,鼠标悬停在按下它并且鼠标离开切换按钮后会改变颜色。我取消了鼠标悬停颜色更改,这使我可以将颜色设置为 Checked 状态,但我不想失去鼠标悬停效果。有没有办法两者兼得?我创建了自己的扩展器,自学创建控件,但无法弄清楚如何同时拥有鼠标悬停和按下的颜色,在我的示例中,鼠标悬停应该仅在未单击/检查按钮时重置。我正在处理这种 ToggleButton 样式: http: //msdn.microsoft.com/en-us/library/cc296245 (v=vs.95).aspx

4

2 回答 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 回答