c# - 鼠标悬停按钮时无法更改边框颜色

标签 c# wpf button

当鼠标悬停在按钮上时,我正在尝试更改默认边框颜色,但无法正常工作。我认为这会很好,但显然它没有:

<Button>
    <Button.Resources>
        <Color x:Key="ControlMouseOverColor">somecolor</Color>
     </Button.Resources>
</Button>

有什么办法吗?

最佳答案

这是您需要做一些稍微复杂的事情才能在 WPF 中完成一些简单的事情的情况之一 :)。您实际上需要覆盖 Button 控件的 ControlTemplate,因为鼠标悬停在按钮上时的边框颜色由默认的 ControlTemplate 确定。下面是一个带有默认 CotrolTemplate 的按钮,减去 IsMouseOver setter 设置为红色:

    <Button>
        <Button.Template>
            <ControlTemplate TargetType="{x:Type ButtonBase}">
                <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                    <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="Button.IsDefaulted" Value="True">
                        <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" TargetName="border" Value="#FFBEE6FD"/>
                        <Setter Property="BorderBrush" TargetName="border" Value="Red"/>
                    </Trigger>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter Property="Background" TargetName="border" Value="#FFC4E5F6"/>
                        <Setter Property="BorderBrush" TargetName="border" Value="#FF2C628B"/>
                    </Trigger>
                    <Trigger Property="ToggleButton.IsChecked" Value="True">
                        <Setter Property="Background" TargetName="border" Value="#FFBCDDEE"/>
                        <Setter Property="BorderBrush" TargetName="border" Value="#FF245A83"/>
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter Property="Background" TargetName="border" Value="#FFF4F4F4"/>
                        <Setter Property="BorderBrush" TargetName="border" Value="#FFADB2B5"/>
                        <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="#FF838383"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Button.Template>
        Click
    </Button>

关于c# - 鼠标悬停按钮时无法更改边框颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33468523/

相关文章:

c# - 使用 DateTime.Parse 方法时出现异常

c# - 从配置文件强制应用程序到管理员

c# - WPF DataGrid AutoGeneratingColumn 未可靠触发

变量中的 JavaScript/HTML 代码?

c# - 在特定条件下使用 LINQ 从列表中获取数字

c# - 如何抽象出来自三个不同服务的三个相同类型的对象?

c# - 创建自定义 wpf 事件

c# - WPF:如果您正在运行的应用程序是 'idle',则创建您自己的屏幕保护程序

swift - 更改属性标题在按钮中的位置

java - 创建图像变量不起作用