我遇到了Silverlight事件中没有为Button和hyperlinkButton触发MouseLeftButtonDown的问题。看起来它是在框架中的某个地方处理的。我如何能够覆盖这种行为
在下面的XAML代码中当我点击Named Cancel按钮时,不会触发Button_MouseLeftButtonDown。 我尝试在按钮内放置textblock,当我单击按钮上的文本时,MouseLeftButtonDown工作,但它没有冒泡到框架
<Button Name="Cancel" ClickMode="Release" MouseLeftButtonDown="Button_MouseLeftButtonDown">
<Button.Content>
<TextBlock Name="CancelInnerText" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown">Clone Page</TextBlock>
</Button.Content>
答案 0 :(得分:7)
让它工作,必须为按钮设置ClickMode =“Hover”。现在MouseLeftButtonDown事件正在触发并冒泡
答案 1 :(得分:0)
如果它只是一个普通按钮,您通常会使用默认行为:
<Button Name="Cancel" Click="Button_Click">
<Button.Content>
<TextBlock>Clone Page</TextBlock>
</Button.Content>
</Button>
答案 2 :(得分:0)
你不认真!如果用户触摸大型表单上的取消按钮会发生什么?只需触发连接到取消按钮的内容??
魔术与焦点机制有关,来自控制。它会将所有事件重定向到focus元素(在框架深处的静态类中)。在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();
}
}
答案 3 :(得分:0)
您可以为MouseLeftButtonDown事件调用AddHandler方法(如下所示),并且会在您的代码中触发该事件。
button1.AddHandler(Button.MouseLeftButtonDownEvent, new ouseButtonEventHandler(button1_MouseLeftButtonDown), true);
private void button1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
// your code
}