zoukankan      html  css  js  c++  java
  • Silverlight中按钮实现简单的拖放功能注意点

       <Canvas Background="#46461F">
            <Button
               MouseLeftButtonDown="OnMouseDown"
               MouseMove="OnMouseMove"
               MouseLeftButtonUp="OnMouseUp"
               Canvas.Left="50" Canvas.Top="50" Background="Red"
               FontSize="18"         
                ClickMode="Hover"
               Width="160" Height="80">
                <Button.Content>
                    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center"
                                VerticalAlignment="Center">
                    
                        <TextBlock Text="拖动我" VerticalAlignment="Center" Margin="10"></TextBlock>
                    </StackPanel>
                </Button.Content>
            </Button>
        </Canvas>

    红色为注意点,否则按钮触发不了MouseLeftButtonDown与MouseLeftButtonUp

     

     

     

     以下为事件 

      bool trackingMouseMove = false;
            Point mousePosition;

            void OnMouseDown(object sender, MouseButtonEventArgs e)
            {
                FrameworkElement element = sender as FrameworkElement;
                mousePosition = e.GetPosition(null);
                trackingMouseMove = true;
                if (null != element)
                {
                    element.CaptureMouse();
                    element.Cursor = Cursors.Hand;
                }
            }

            void OnMouseMove(object sender, MouseEventArgs e)
            {
                FrameworkElement element = sender as FrameworkElement;
                if (trackingMouseMove)
                {
                    double deltaV = e.GetPosition(null).Y - mousePosition.Y;
                    double deltaH = e.GetPosition(null).X - mousePosition.X;
                    double newTop = deltaV + (double)element.GetValue(Canvas.TopProperty);
                    double newLeft = deltaH + (double)element.GetValue(Canvas.LeftProperty);

                    element.SetValue(Canvas.TopProperty, newTop);
                    element.SetValue(Canvas.LeftProperty, newLeft);

                    mousePosition = e.GetPosition(null);
                }
            }

            void OnMouseUp(object sender, MouseButtonEventArgs e)
            {
                FrameworkElement element = sender as FrameworkElement;
                trackingMouseMove = false;
                element.ReleaseMouseCapture();

                mousePosition.X = mousePosition.Y = 0;
                element.Cursor = null;
            }

     

  • 相关阅读:
    Windows API一日一练(55)FlushFileBuffers和SetFilePointer函数
    JDBC连接MySQL数据库及演示样例
    FusionCharts简单教程(一)---建立第一个FusionCharts图形
    破解中国电信华为无线猫路由(HG522-C)自己主动拨号+不限电脑数+iTV
    DB9 公头母头引脚定义及连接
    第二届战神杯线上编程挑战赛月赛第一题:回文数
    白话经典算法系列之七 堆与堆排序
    开发人员程序猿10大聚集地
    对不起,说句粗话——这个太屌了,windows1.0安装程序(附下载)
    Arduino入门套件 Arduino UNO R3
  • 原文地址:https://www.cnblogs.com/lbg280/p/1639249.html
Copyright © 2011-2022 走看看