3

I ran into the problem where in Silverlight event MouseLeftButtonDown is not being fired for Button and hyperlinkButton. Looks like it is handled somewhere in the framework. How I can override this behavior

In the XAML code below When I click on the button Named Cancel, Button_MouseLeftButtonDown is not fired. I tried putting textblock within the button , MouseLeftButtonDown works when I click on the text on the button, but it is not bubbled up to the Frame

    <Button Name="Cancel" ClickMode="Release" MouseLeftButtonDown="Button_MouseLeftButtonDown">
            <Button.Content>
                <TextBlock Name="CancelInnerText" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown">Clone Page</TextBlock>
            </Button.Content>

Raj
  • 636
  • 1
  • 8
  • 12

4 Answers4

7

Got it to work, had to set the ClickMode="Hover" for the button. Now MouseLeftButtonDown event is firing and also bubbling

Raj
  • 636
  • 1
  • 8
  • 12
0

Yeah, I'm not sure what you're going for here. Is this some type of odd situation or are you just looking to have a button that fires an event when you're clicking it?

If its just a normal button you would typically use the default behavior of:

    <Button Name="Cancel" Click="Button_Click">
        <Button.Content>
            <TextBlock>Clone Page</TextBlock>
        </Button.Content>
    </Button>
James Hollister
  • 537
  • 4
  • 9
0

you can call AddHandler method for MouseLeftButtonDown event (as following) and the event will get fired in your code.

button1.AddHandler(Button.MouseLeftButtonDownEvent, new  ouseButtonEventHandler(button1_MouseLeftButtonDown), true);

private void button1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
        // your code
}
Abhishek Gahlout
  • 3,132
  • 2
  • 20
  • 28
0

You are not serious! What happens if a user touches a cancel button on a large form? Just firing what is connected to the cancel button??

The magic has to do with focus-mechanism, coming from control. It will redirect all events to the focused element (in a static class deep in the framework). And on mousebuttondown, this focus is set via base.Focus();

So: Just override MouseLeftButtonDown and set the focus and everything works fine.

Example of a control that can be placed within a button (or a button template):

public class InAction : ContentControl
{
    public InAction()
    {
        this.DefaultStyleKey = typeof(InAction);
        this.MouseLeftButtonDown += new MouseButtonEventHandler(InAction_MouseLeftButtonDown);
    }

    void InAction_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        base.Focus();   
    }
}
akjoshi
  • 15,374
  • 13
  • 103
  • 121