2

I have a xaml code for Button declared as ControlTemplate App.xaml

 <!--Style for button start here-->
  <Style  x:Key="myButtonStyle" TargetType="Border">
  <EventSetter Event="Border.MouseLeftButtonDown" Handler="ButtonDown" />
    <EventSetter Event="Border.MouseLeftButtonUp" Handler="ButtonUp" />
    <EventSetter Event="Border.MouseEnter" Handler="ButtonEnter" />
    <EventSetter Event="Border.MouseLeave" Handler="ButtonLeave"/>

</Style>

<!--Style for myButtonStyle ends here-->

<!--Control Template for button start here-->
<ControlTemplate TargetType="Button" x:Key="buttonPrimary">
    <Grid Width="{TemplateBinding Width}">
        <Border Height="35" Width="{TemplateBinding Width}" Style="{StaticResource myButtonStyle}"  Background="{TemplateBinding Background}" CornerRadius="3" Loaded="borderLoaded"  x:Name="myButton">
                <ContentPresenter  HorizontalAlignment="Center"  VerticalAlignment="Center" >
                    <TextBlock.Foreground>
                        White
                    </TextBlock.Foreground>
                    <TextBlock.FontSize>14</TextBlock.FontSize>

                </ContentPresenter>
        </Border>
    </Grid>

</ControlTemplate> 

And In another file I have handled all mouse event .. Main.cs

 private void ButtonDown(object sender, RoutedEventArgs e)
   {
       Console.WriteLine("ButtonDown");

   }//Button Down method ends here


   private void ButtonUp(object sender, RoutedEventArgs e)
   {
       Console.WriteLine("Button Up");

   }//ButtonUp method ends here


   private void ButtonLeave(object sender, RoutedEventArgs e)
   {
       Console.WriteLine("ButtonLeave");
   }


   private void ButtonEnter(object sender, RoutedEventArgs e)
   {
       Console.WriteLine("ButtonEnter");
   }

In main.xaml I am calling these button.. Main.xaml

 <Button   Content="ButtonPrimary" Width="110" Background="#428bca" Template="{StaticResource buttonPrimary}"  />

All the event are firing except MouseLeftButtonUp ..??

Robins Gupta
  • 3,143
  • 3
  • 34
  • 57
  • possible duplicate of [MouseLeftButtonUp does not fire](http://stackoverflow.com/questions/12496258/mouseleftbuttonup-does-not-fire) – Rohit Vats Feb 27 '14 at 14:25

1 Answers1

3

The Button's click event eats MouseUp events.

So:

    <Style x:Key="buttonPrimary" TargetType="Button">
        <EventSetter Event="Click" Handler="ButtonBase_OnClick"/>
        <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ButtonDown" />
        <EventSetter Event="PreviewMouseLeftButtonUp" Handler="ButtonUp" />
        <EventSetter Event="MouseEnter" Handler="ButtonEnter" />
        <EventSetter Event="MouseLeave" Handler="ButtonLeave"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Grid Width="{TemplateBinding Width}">
                        <Border Height="35" Width="{TemplateBinding Width}" Background="{TemplateBinding Background}" CornerRadius="3"   x:Name="myButton">
                        <ContentPresenter  HorizontalAlignment="Center"  VerticalAlignment="Center" >
                            <TextBlock.Foreground>
                                White
                            </TextBlock.Foreground>
                            <TextBlock.FontSize>14</TextBlock.FontSize>

                        </ContentPresenter>
                        </Border>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>          
    </Style>

Then add the ButtonBase_OnClick event that just handles the click event:

private void ButtonBase_OnClick(object sender, RoutedEventArgs e){
    e.Handled = true;
}

And Change your Button from Template= to Style= then you will get all your events.

safetyOtter
  • 1,430
  • 14
  • 26
  • 1
    hehe,Thanks! First question I've ever answered in wpf so while I'm sorry I beat you, I'm still pretty stoked :) – safetyOtter Feb 27 '14 at 14:22