2009-12-09 130 views
3

我遇到了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> 

回答

7

得到它的工作,不得不設置ClickMode =「懸停」的按鈕。現在MouseLeftButtonDown事件正在觸發並冒泡

0

是啊,我不知道你是什麼我要去這裏。這是一種奇怪的情況,還是你只是想找一個按鈕來點擊它時觸發一個事件?

如果它只是一個正常的按鈕,你將通常使用的默認行爲:

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

你並不認真!如果用戶觸摸大表單上的取消按鈕會發生什麼?只要發射連接到取消按鈕的東西?

魔術與焦點機制有關,來自控制。它會將所有事件重定向到焦點元素(在框架深處的靜態類中)。並且在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(); 
    } 
} 
0

您可以撥打MouseLeftButtonDown事件的AddHandler方法(如下),而該事件將會在你的代碼會被解僱。

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

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