Handling Events In Style Tag in Xaml

1.5k Views Asked by At

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);
    }

}
1

There are 1 best solutions below

0
On BEST ANSWER

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>