Search code examples
c#wpfxamlresourcedictionaryeventsetter

Handling Events In Style Tag in Xaml


i m using EventSetter inside Style tag in xaml and Handling MouseEnter event. But the problem is that the mouse enter event is only visible for a moment and get disappeard after that...why is it so??why it is not persisting??

this is my xaml file in which i have define style

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

and this is my .cs file where i m handling events

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

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

}

Solution

  • The behaviour you seeing is because in default template of button, there is a trigger on IsMouseOver property where explicit color is set to value #FFBEE6FD.

    Specifically the trigger is this:

    <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>
    

    But unfortunately if you have to change the value in that trigger you have to override entire ControlTemplate of button.

    For your case it will be like this (with color 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>