none
Button按钮左键点击怎么做相当于是右键点击? RRS feed

  • 问题

  • 有一个Button按钮,我希望左键点击它的时候,相当于是右键点击了它。这个怎么写代码呀?拜托各位高手
    菜爷
    2011年3月4日 9:32

答案

  • 1)点击左键完全可以弹出右键菜单,但是点击左键不能模拟成点击右键。

    2)如果不用ContextMenu,自己用Popup做,效果更好。(我的程序一般自己用Popup做,可以随意控制)。

    3)这个例子不是很好,只是说明可以。

        public partial class PgTest : UserControl
        {
            private ContextMenu PopTest;
            public PgTest()
            {
                InitializeComponent();
                // Create A Test Context Menu
                PopTest = new ContextMenu()
                {
                    Background = new SolidColorBrush(Colors.Red),
                };
                PopTest.Items.Add(new MenuItem() { Header = "MenuItem 01", Visibility = Visibility.Visible });
                PopTest.Items.Add(new MenuItem() { Header = "MenuItem 02", });
                ContextMenuService.SetContextMenu(TxtTest, PopTest);

                // Attach Events
                this.TxtTest.MouseLeftButtonDown += new MouseButtonEventHandler(TxtTest_MouseLeftButtonDown);
                this.TxtTest.MouseRightButtonDown += new MouseButtonEventHandler(TxtTest_MouseRightButtonDown);
            }

            void TxtTest_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
            {
                PopTest.HorizontalOffset = e.GetPosition(null).X;
                PopTest.VerticalOffset = e.GetPosition(null).Y;
                PopTest.IsOpen = true;
            }
            void TxtTest_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                PopTest.HorizontalOffset = e.GetPosition(null).X;
                PopTest.VerticalOffset = e.GetPosition(null).Y;
                PopTest.IsOpen = true;
            }
        }

    • 已标记为答案 菜爷 2011年3月5日 3:09
    2011年3月4日 18:48

全部回复

  • 你想干什么?

    为什么要点击左键相当于点击了右键?我猜测你是为了:

    1)弹出Silverlight的配置界面。

    2)弹出自己定义的右键菜单。

    如果是这两个目的,你根本无需模拟点击右键,有现成的右键点击事件。

     

    2011年3月4日 14:29
  • 我是要右键菜单,但我希望点击左键时就弹出右键菜单,而不是点击右键时弹出,当然点击右键弹出也无所谓,但要求点击左键时也弹出来,以适合使用者的习惯。

    ASPX就有如此功能的控件,但SL却没有,我想用点击左键的时候如果弹出右键菜单,SL就变相有了这个功能的控件的。如此功能的控件是需要的。麻烦给想想办法


    菜爷
    2011年3月4日 15:34
  • 1)点击左键完全可以弹出右键菜单,但是点击左键不能模拟成点击右键。

    2)如果不用ContextMenu,自己用Popup做,效果更好。(我的程序一般自己用Popup做,可以随意控制)。

    3)这个例子不是很好,只是说明可以。

        public partial class PgTest : UserControl
        {
            private ContextMenu PopTest;
            public PgTest()
            {
                InitializeComponent();
                // Create A Test Context Menu
                PopTest = new ContextMenu()
                {
                    Background = new SolidColorBrush(Colors.Red),
                };
                PopTest.Items.Add(new MenuItem() { Header = "MenuItem 01", Visibility = Visibility.Visible });
                PopTest.Items.Add(new MenuItem() { Header = "MenuItem 02", });
                ContextMenuService.SetContextMenu(TxtTest, PopTest);

                // Attach Events
                this.TxtTest.MouseLeftButtonDown += new MouseButtonEventHandler(TxtTest_MouseLeftButtonDown);
                this.TxtTest.MouseRightButtonDown += new MouseButtonEventHandler(TxtTest_MouseRightButtonDown);
            }

            void TxtTest_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
            {
                PopTest.HorizontalOffset = e.GetPosition(null).X;
                PopTest.VerticalOffset = e.GetPosition(null).Y;
                PopTest.IsOpen = true;
            }
            void TxtTest_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                PopTest.HorizontalOffset = e.GetPosition(null).X;
                PopTest.VerticalOffset = e.GetPosition(null).Y;
                PopTest.IsOpen = true;
            }
        }

    • 已标记为答案 菜爷 2011年3月5日 3:09
    2011年3月4日 18:48
  • 如果Button屏蔽了MouseLeftButtonDown,你就别用Button,换一个控件算了。这个我没试验。
    2011年3月4日 19:46
  • 1)点击左键完全可以弹出右键菜单

    这个很棒了。没想到动态生成ContextMenu这个思路。

    用popup等做,麻烦的是如何显示,需要考虑太多。没能力把显示问题圆满地搞定。

    谢谢,非常感谢。


    菜爷
    2011年3月5日 3:09