Silverlight事件MouseLeftButtonDown没有被解雇
问题描述:
我遇到了Silverlight事件MouseLeftButtonDown没有被触发的Button和hyperlinkButton的问题。看起来它是在框架的某个地方处理的。我如何覆盖此行为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
}