Silverlight事件MouseLeftButtonDown未触发

时间:2009-12-09 19:12:13

标签: silverlight mouseleftbuttonup

我遇到了Silverlight事件中没有为Button和hyperlinkBut​​ton触发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>

4 个答案:

答案 0 :(得分:7)

让它工作,必须为按钮设置C​​lickMode =“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
}