【问题标题】:The Mouse Over trigger is not working on wpf button control鼠标悬停触发器不适用于 wpf 按钮控件
【发布时间】:2017-06-15 05:12:12
【问题描述】:

鼠标悬停触发器不适用于 wpf 按钮控件。当鼠标悬停在按钮上时,我想更改按钮的背景和前景。

<Button.Style>
    <Style TargetType="{x:Type Button}">
        <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="{x:Type Button}">
            <Border Background="{TemplateBinding Background}" BorderBrush="Black" BorderThickness="1">
                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
            </Border>
         </ControlTemplate>
       </Setter.Value>
       <Style.Triggers>
          <Trigger Property="IsMouseOver" Value="True">
             <Setter Property="Background">
                <Setter.Value>
                    <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
                       <GradientStop Color="#FFF2E32F" Offset="0" />
                       <GradientStop Color="#FF45E815" Offset="1" />
                    </LinearGradientBrush>
                </Setter.Value>
             </Setter>
             <Setter Property="Foreground" Value="White"/>
        </Trigger>
      </Style.Triggers>
   </Style>
</Button.Style>

编辑

我添加了模板,但它只是删除了按钮默认的 MouseOver 触发器,并没有发生我想要的前景和背景样式。

【问题讨论】:

  • 你有没有看过这个问题并尝试解决方案? stackoverflow.com/questions/17259280/…
  • @RizkiPratama 是的。但添加模板没有任何改变。这个解决方案只是删除了按钮默认的 MouseOver 触发器,但没有发生我想要的前景和背景样式。
  • 当然,当您将默认触发器替换为自定义控件模板时,它会被删除。这是预期的行为。你到底想完成什么?您不能组合两个不同的控件模板。

标签: c# wpf


【解决方案1】:

我从here 找到了一个可行的解决方案。像这样定义按钮内部的样式:

<Button.Style>
    <Style TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border Background="{TemplateBinding Background}" BorderBrush="Black" BorderThickness="1">
                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background">
                    <Setter.Value>
                        <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
                            <GradientStop Color="#FFF2E32F" Offset="0" />
                            <GradientStop Color="#FF45E815" Offset="1" />
                        </LinearGradientBrush>
                    </Setter.Value>
                </Setter>
                <Setter Property="Foreground" Value="White"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</Button.Style>

【讨论】:

  • @AAAE_N 我可以看看你的完整代码吗?因为我自己试过了,它对我有用,也就是说,鼠标悬停在触发器上。
猜你喜欢
  • 2011-12-01
  • 2011-08-22
  • 2016-03-15
  • 1970-01-01
  • 2014-01-14
  • 2020-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多