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

 

原文地址:https://www.cnblogs.com/lbg280/p/1639249.html