3

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

在下面的 XAML 代码中,当我单击名为 Cancel 的按钮时,不会触发 Button_MouseLeftButtonDown。我尝试将文本块放在按钮内,当我单击按钮上的文本时,MouseLeftButtonDown 有效,但它不会冒泡到 Frame

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

4

4 回答 4

7

让它工作,必须为按钮设置 ClickMode="Hover"。现在 MouseLeftButtonDown 事件正在触发并且冒泡

于 2009-12-09T19:48:46.273 回答
0

是的,我不确定你来这里是为了什么。这是某种奇怪的情况,还是您只是希望有一个在单击时触发事件的按钮?

如果它只是一个普通按钮,您通常会使用以下默认行为:

    <Button Name="Cancel" Click="Button_Click">
        <Button.Content>
            <TextBlock>Clone Page</TextBlock>
        </Button.Content>
    </Button>
于 2009-12-09T19:21:21.090 回答
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();   
    }
}
于 2011-04-14T03:36:03.827 回答
0

您可以为 MouseLeftButtonDown 事件调用 AddHandler 方法(如下所示),该事件将在您的代码中触发。

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

private void button1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
        // your code
}
于 2013-10-28T05:33:49.970 回答