如何在按钮单击时暂时禁用鼠标悬停效果可见性?

时间:2014-09-09 17:37:47

标签: c# wpf xaml mouseover buttonclick

为简单起见,我们假设我的程序按钮在“关闭”时为白色,在“开启”时为绿色。当鼠标悬停在按钮上时,按钮会将颜色更改为浅蓝色。目前,当单击按钮时,按钮颜色保持浅蓝色,直到鼠标不再悬停在按钮上,然后(当鼠标移开并且不再悬停在按钮上时)按钮的绿色或白色背景为显示。悬停效果和按钮背景的代码目前是......

<ControlTemplate TargetType="{x:Type Button}">
  <Border x:Name="bdr" CornerRadius="22" Margin="3" BorderThickness="2.5" BorderBrush="Black" Background="{TemplateBinding Background}">
     <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" ContentSource="Content" />
  </Border>
  <ControlTemplate.Triggers>
     <Trigger Property="IsMouseOver" Value="True">
         <Setter TargetName="bdr" Property="Background" Value="#ABBEC9"/>
     </Trigger>

我需要在点击事件后立即显示按钮新背景(即使鼠标仍然悬停在按钮上)。我无法实现这一点。

我已经尝试过下面的MultiDataTrigger,但悬停颜色只会在点击为白色时闪烁,即使鼠标不再悬停在按钮上也不再显示背景颜色,因此代码显然是错误的。

<MultiDataTrigger>
  <MultiDataTrigger.Conditions>
     <Condition Binding="{Binding ElementName=bdr, Path=IsMouseOver}" Value="True" />
  </MultiDataTrigger.Conditions>
     <Setter TargetName="bdr" Property="Background" Value="#ABBEC9" />
  </MultiDataTrigger>
<MultiDataTrigger>
   <MultiDataTrigger.Conditions>
      <Condition Binding="{Binding ElementName=bdr, Path=IsMouseOver}" Value="False" />
   </MultiDataTrigger.Conditions>
      <Setter TargetName="bdr" Property="Background" Value="White" />                            
</MultiDataTrigger>

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

你必须自己处理这个问题,可能只需要少量的程序代码(例如布尔属性)。

如果你想保持简单,那么你可以用另一种方式显示状态,比如利用BorderBrush显示Button的{​​{1}}。

以下是完整的模板:

Background