【问题标题】:Silverlight event MouseLeftButtonDown not firedSilverlight 事件 MouseLeftButtonDown 未触发
【发布时间】:2009-12-09 19:12:12
【问题描述】:

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

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

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

【问题讨论】:

    标签: silverlight mouseleftbuttonup


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        你不是认真的!如果用户触摸大表单上的取消按钮会发生什么?只是触发连接到取消按钮的东西??

        魔法与来自控制的焦点机制有关。它将所有事件重定向到焦点元素(在框架深处的静态类中)。在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();   
            }
        }
        

        【讨论】:

          【解决方案4】:

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

          button1.AddHandler(Button.MouseLeftButtonDownEvent, new  ouseButtonEventHandler(button1_MouseLeftButtonDown), true);
          
          private void button1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
          {
                  // your code
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-03-02
            • 1970-01-01
            • 2016-06-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多