You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF ControlTemplate实现鼠标悬停时按钮背景取BorderBrush颜色

解决WPF Button鼠标悬停时背景色设为BorderBrush的问题

我来帮你搞定这个需求!你尝试的Value="Border.BorderBrush"写法之所以不行,是因为WPF的Setter不能直接通过这种字符串格式来引用元素的属性值,得用数据绑定的方式来实现这个效果。

下面给你两种可行的解决方案:

方案一:直接绑定到Border元素的BorderBrush

我们可以通过ElementName绑定到模板里的Border控件,直接获取它的BorderBrush值来设置Background:

<Trigger Property="IsMouseOver" Value="true">
    <Setter TargetName="Border" Property="Background" 
            Value="{Binding ElementName=Border, Path=BorderBrush}"/>
</Trigger>

方案二:绑定到Button自身的BorderBrush属性

因为模板里的Border已经用{TemplateBinding BorderBrush}绑定了Button的BorderBrush属性,所以我们也可以直接绑定到Button(模板父元素)的BorderBrush:

<Trigger Property="IsMouseOver" Value="true">
    <Setter TargetName="Border" Property="Background" 
            Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=BorderBrush}"/>
</Trigger>

两种方案效果完全一致,你可以根据自己的习惯选择。

修改后的完整Style代码

<Style TargetType="Button">
  <Setter Property="Cursor" Value="Hand"/>
  <Setter Property="Background" Value="White"/>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="Button">
        <Grid>
          <Border x:Name="Border" CornerRadius="6" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">
            <TextBlock x:Name="ContentBlock" Foreground="{TemplateBinding Foreground}" Text="{TemplateBinding Content}" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>
          </Border>
        </Grid>
        <ControlTemplate.Triggers>
          <Trigger Property="IsEnabled" Value="false">
            <Setter TargetName="Border" Property="BorderBrush" Value="Gray"></Setter>
            <Setter TargetName="ContentBlock" Property="Foreground" Value="Gray"></Setter>
          </Trigger>
          <Trigger Property="IsMouseOver" Value="true">
            <!-- 这里替换成上面两种方案的任意一种即可 -->
            <Setter TargetName="Border" Property="Background" 
                    Value="{Binding ElementName=Border, Path=BorderBrush}"/>
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

内容的提问来源于stack exchange,提问作者RezaNoei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:23:31