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";
            }
  • 相关阅读:
    Mybatis学习二(字段名与实体类属性名不相同/关联查询)
    SpringMVC学习二(日期参数/数据保存/重定向)
    Mybatis学习四(分页助手pagehelper)
    Mybatis学习三(动态sql语句)
    https详解
    http协议详解(超详细)
    Hdu 1072 【广搜】.cpp
    Hdu 1534 【差分约束系统】.cpp
    Hdu 1305 【字典树】.cpp
    并发
  • 原文地址:https://www.cnblogs.com/dupeng0811/p/1701539.html
Copyright © 2011-2022 走看看