2014-02-10 33 views
1

我使用EventSetter inside Style xaml中的标记和处理MouseEnter事件。 但问题是,鼠标进入事件只是可见一会儿,然后消失......为什么这样?为什么它不是持续?处理Xaml中Style中的事件

这是我所定义样式

<Style x:Key="MouseOverHighlightStyle"> 
    <EventSetter Event="Button.MouseEnter" Handler="element_MouseEnter" /> 
    <Setter Property="Button.Padding" Value="5"/> 
</Style> 

我的XAML文件,这是我的.cs文件,其中IM处理事件

namespace testing2 
{ 
    partial class stt 
    { 
    private void element_MouseEnter(object sender, MouseEventArgs e) 
    { 

     ((Button)sender).Background = 
     new SolidColorBrush(Colors.LightGoldenrodYellow); 
    } 

} 
+2

你是什么意思_mouse进入事件只是一会儿可见,并得到disappeard_? 'MouseEnter'是一个事件,并没有状态。如果你想状态有'UIElement.IsMouseOver' – dkozl

+0

是...当我使用button.IsMouseOver它也出现一秒钟然后消失...我想改变按钮的背景,直到鼠标结束它! – Ravi

+0

它不是'MouseEnter'或'IsMouseOver' _disappears_,但'Button'有它的默认模板,当鼠标结束时它将改变背景颜色。您可以创建自己的模板并指定鼠标移动完成后应该发生的情况 – dkozl

回答

2

行为你看到的是因为在按钮的默认模板里有我是IsMouseOver属性中的触发器,其中明确的颜色设置为值#FFBEE6FD

具体的触发是这样的:

<Trigger Property="UIElement.IsMouseOver" Value="True"> 
    <Setter Property="Panel.Background" TargetName="border"> 
     <Setter.Value> 
     <SolidColorBrush>#FFBEE6FD</SolidColorBrush> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Border.BorderBrush" TargetName="border"> 
    <Setter.Value> 
     <SolidColorBrush>#FF3C7FB1</SolidColorBrush> 
    </Setter.Value> 
    </Setter> 
</Trigger> 

但不幸的是,如果你要改变在触发你必须重写按钮的整个控件模板值。

对于您的情况下,它会是这样的(颜色LightGoldenrodYellow):

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