zoukankan      html  css  js  c++  java
  • Silverlight实例开发 简单的拖拽效果

    Silverlight 2完美征程学习笔记

    拖拽效果分为3个步骤

    1. 按下鼠标,触发MouseLeftButtonDown事件,选择要拖动的对象
    2. 移动鼠标,触发MouseMove事件,移动选择的对象
    3. 放开鼠标,触发MouseLeftButtonUp事件,停止捕捉事件

    页面代码:

    <UserControl x:Class="SilverlightStuding.MouseDrag"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        Width="400" Height="300">
        <Canvas>
            <StackPanel MouseLeftButtonDown="StackPanel_MouseLeftButtonDown" MouseMove="StackPanel_MouseMove" 
                    MouseLeftButtonUp="StackPanel_MouseLeftButtonUp" Canvas.Left="50" Canvas.Top="50" Width="200" Height="80">
            <Border BorderThickness="3" BorderBrush="Red">
                <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
                    <Image Source="drag.png"/>
                    <TextBlock Text="Drag Me" VerticalAlignment="Center" Margin="10"></TextBlock>
                </StackPanel>
            </Border>
        </StackPanel>
            <TextBlock Text="" x:Name="txtStatus" Canvas.Top="200" Canvas.Left="60"></TextBlock>
        </Canvas>
    </UserControl>

    开始拖放操作,实现MouseLeftButtonDown事件的处理

            private void StackPanel_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                FrameworkElement element = sender as FrameworkElement;
                mousePosition = e.GetPosition(null);
                trackingMouseMove = true;
    
                if(null!=element)
                {
                    element.CaptureMouse();
                    element.Cursor = Cursors.Hand;
                }
                txtStatus.Text = "MouseLeftButtonDown";
            }

    移动对象,实现 MouseMove事件处理程序,计算元素的位置并更新,同时更新鼠标的位置

            private void StackPanel_MouseMove(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);
                }
    
                txtStatus.Text = "Mouse Moving ……";
            }

    完成拖放操作,释放鼠标,实现MouseLeftButtonUp事件处理程序

            private void StackPanel_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
            {
                FrameworkElement element = sender as FrameworkElement;
                trackingMouseMove = false;
                element.ReleaseMouseCapture();
    
                mousePosition.X = mousePosition.Y = 0;
                element.Cursor = null;
    
                txtStatus.Text = "ReleaseMouse";
            }
  • 相关阅读:
    database backup scripts
    RMAN笔记之备份集和备份片
    数据缓冲区详解
    Oracle数据库中快照的使用
    linux 安装RabbitMQ 注意版本
    转 Oracle12c/11个 Client安装出现"[INS-30131]"错误“请确保当前用户具有访问临时位置所需的权限”解决办法之完整版
    Oracle alert日志中出现:‘Fatal NI connect error 12170’
    Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区
    python基础: String类型
    Python3 urllib模块的使用(转载)
  • 原文地址:https://www.cnblogs.com/dupeng0811/p/1701539.html
Copyright © 2011-2022 走看看