Silverlight事件MouseLeftButtonDown没有被解雇

问题描述:

我遇到了Silverlight事件MouseLeftButtonDown没有被触发的Button和hyperlinkBut​​ton的问题。看起来它是在框架的某个地方处理的。我如何覆盖此行为Silverlight事件MouseLeftButtonDown没有被解雇

在下面的XAML代码当我点击按钮命名取消,Button_MouseLeftButtonDown不会被触发。 我试过按钮内把正文块,工作的MouseLeftButtonDown当我点击按钮上的文本,但它不冒泡的框架

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

得到它的工作,不得不设置ClickMode =“悬停”的按钮。现在MouseLeftButtonDown事件正在触发并冒泡

是啊,我不知道你是什么我要去这里。这是一种奇怪的情况,还是你只是想找一个按钮来点击它时触发一个事件?

如果它只是一个正常的按钮,你将通常使用的默认行为:

<Button Name="Cancel" Click="Button_Click"> 
     <Button.Content> 
      <TextBlock>Clone Page</TextBlock> 
     </Button.Content> 
    </Button> 

你并不认真!如果用户触摸大表单上的取消按钮会发生什么?只要发射连接到取消按钮的东西?

魔术与焦点机制有关,来自控制。它会将所有事件重定向到焦点元素(在框架深处的静态类中)。并且在mousebuttondown上,该焦点通过base.Focus()设置;

所以:只需覆盖MouseLeftButtonDown并设置焦点,一切工作正常。

,可以放置一个按钮内的控制(或按钮模板)的例子:

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

您可以拨打MouseLeftButtonDown事件的AddHandler方法(如下),而该事件将会在你的代码会被解雇。

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

private void button1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
     // your code 
}