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

     

  • 相关阅读:
    VIM文本替换命令
    VIM格式化代码(How to format code with VIM)
    字符串匹配的Boyer-Moore算法
    Java中数组的遍历
    UVa10723
    uva242,Stamps and Envelope Size
    UVa1630,Folding
    uva1629,Cake Slicing,记忆化搜索
    uva 10118,记忆化搜索
    uva10003
  • 原文地址:https://www.cnblogs.com/lbg280/p/1639249.html
Copyright © 2011-2022 走看看