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;
            }

     

  • 相关阅读:
    使用代理加快SDK Manager的下载速度
    ADT-Bundle运行的错误的排错
    转:Android开发之JNI入门-NDK从入门到精通
    Android NDK的总总误解
    mysql 数据库 一些常用语句 查内存 索引内存
    递归方法 练习编写
    ES 搜索概述
    PHP 数字类型 加 减 乘 除运算 bc函数
    php 控制反转 和 依赖注入
    Thinkphp 3 和 Thinkphp5 区别
  • 原文地址:https://www.cnblogs.com/lbg280/p/1639249.html
Copyright © 2011-2022 走看看