如何更改按钮的发光颜色

时间:2014-05-21 12:18:13

标签: wpf button focus

如何更改Button的发光颜色,我编辑了Button的Control模板仍然无法找到这个发光动画的位置。

有人可以指导我吗?

<Style x:Key="ButtonFocusVisual">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate>
                    <Rectangle Margin="2" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <LinearGradientBrush x:Key="ButtonNormalBackground" EndPoint="0,1" StartPoint="0,0">
        <GradientStop Color="#F3F3F3" Offset="0"/>
        <GradientStop Color="#EBEBEB" Offset="0.5"/>
        <GradientStop Color="#DDDDDD" Offset="0.5"/>
        <GradientStop Color="#CDCDCD" Offset="1"/>
    </LinearGradientBrush>
    <SolidColorBrush x:Key="ButtonNormalBorder" Color="#FF707070"/>
    <Style TargetType="{x:Type Button}">
        <Setter Property="FocusVisualStyle" Value="{StaticResource ButtonFocusVisual}"/>
        <Setter Property="Background" Value="{StaticResource ButtonNormalBackground}"/>
        <Setter Property="BorderBrush" Value="{StaticResource ButtonNormalBorder}"/>
        <Setter Property="BorderThickness" Value="1"/>
        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
        <Setter Property="HorizontalContentAlignment" Value="Center"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
        <Setter Property="Padding" Value="1"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Microsoft_Windows_Themes:ButtonChrome x:Name="Chrome" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}" RenderDefaulted="{TemplateBinding IsDefaulted}" SnapsToDevicePixels="true">
                        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    </Microsoft_Windows_Themes:ButtonChrome>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsKeyboardFocused" Value="true">
                            <Setter Property="RenderDefaulted" TargetName="Chrome" Value="true"/>
                        </Trigger>
                        <Trigger Property="ToggleButton.IsChecked" Value="true">
                            <Setter Property="RenderPressed" TargetName="Chrome" Value="true"/>
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter Property="Foreground" Value="#ADADAD"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

2 个答案:

答案 0 :(得分:0)

首先,让我们了解我们在这里处理的内容...... ControlTemplate控件的默认Button可以在MSDN上的Button Styles and Templates页面找到。不幸的是,这里复制太大了。

如果您查看链接页面中的ControlTemplate,您会看到VisualStateManager.VisualStateGroups部分。在这个VisualStateManager.VisualStateGroups部分中,您可以看到一些VisualState个对象......以下是其中之一:

<VisualState x:Name="MouseOver">
    <Storyboard>
        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).
            (GradientBrush.GradientStops)[1].(GradientStop.Color)"
            Storyboard.TargetName="Border">
            <EasingColorKeyFrame KeyTime="0" 
                Value="{StaticResource ControlMouseOverColor}" />
        </ColorAnimationUsingKeyFrames>
    </Storyboard>
</VisualState>

从链接页面:

  

每个VisualStateGroup都包含VisualState个对象的集合。 VisualState包含Storyboard个对象的集合,用于指定控件在某个状态下控件的外观如何变化。例如,Button在按下时的外观可能与未按下时的外观略有不同。 Button定义的两个状态对应于何时按下(“按下”)和何时不按(“正常”)。

这是动画的来源。我们可以通过为ControlTemplate

声明一个非常基本的Button来证明这一点
<Button Content="Click me" HorizontalAlignment="Center" VerticalAlignment="Center">
    <Button.Template>
        <ControlTemplate TargetType="{x:Type Button}">
            <Border BorderBrush="Black" BorderThickness="1" CornerRadius="5" 
                Padding="5">
                <ContentPresenter Content="{TemplateBinding Content}" />
            </Border>
        </ControlTemplate>
    </Button.Template>
</Button>

请注意Color上没有Button动画。

答案 1 :(得分:-1)

如果您指的是按钮周围的细线(默认情况下为蓝色,在Windows 7中),则该行是由默认主题引起的。您可以通过暂时更改Windows主题并再次查看该按钮来测试它。

删除我发现的行为的最简单方法是将按钮样式设置为工具栏按钮的样式

<Button BorderThickness="0" Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" >