silverlight 2.0 实现拖动

<UserControl x:Class="TestPhoto.Page"
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Width="600" Height="400">
    <Canvas x:Name="myPhoto" Background="#CDFCAE">
    </Canvas>
</UserControl>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Media.Imaging;
using System.Windows.Interop;
using System.Windows.Browser;

namespace TestPhoto
{
    public partial class Page : UserControl
    {
        bool trackingMouseMove = false;
        double deltax;
        double deltay;
        Point _point;
        public Page()
        {
            InitializeComponent();
            this.Loaded+=new RoutedEventHandler(Page_Loaded);
        }
        void Page_Loaded(object sender, RoutedEventArgs e)
        {
            Image img = new Image();
            img.Source = new BitmapImage(new Uri("gigi_01.jpg",UriKind.Relative));
            img.Width = 400;
            img.Height = 400;
            img.MouseLeftButtonDown+=new MouseButtonEventHandler(img_MouseLeftButtonDown);
            img.MouseMove+=new MouseEventHandler(img_MouseMove);
            img.MouseLeftButtonUp+=new MouseButtonEventHandler(img_MouseLeftButtonUp);
            Canvas.SetLeft(img, 100);
            Canvas.SetTop(img,100);
            img.RenderTransform = new TranslateTransform();
            this.myPhoto.Children.Add(img);
        }
        void img_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            FrameworkElement fe = (FrameworkElement)sender;
            fe.Cursor = Cursors.Arrow;
            trackingMouseMove = false;

        }
        void img_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            FrameworkElement fe = (FrameworkElement)sender;
            if (fe != null)
            {
                trackingMouseMove = true;
                fe.CaptureMouse();
                _point = e.GetPosition(null);
                fe.Cursor = Cursors.Hand;
                deltax = e.GetPosition(null).X - ((TranslateTransform)fe.RenderTransform).X;
                deltay = e.GetPosition(null).Y - ((TranslateTransform)fe.RenderTransform).Y;
            }

        }
        void img_MouseMove(object sender,MouseEventArgs e)
        {
            if (trackingMouseMove)
            {
                Image img = (Image)sender;
                ((TranslateTransform)img.RenderTransform).X = e.GetPosition(null).X - deltax;
                ((TranslateTransform)img.RenderTransform).Y = e.GetPosition(null).Y - deltay;
            }
        }

    }
   
}


Silverlight中提供了四种基本变换:旋转变换 (RotateTransform )、缩放变换(ScaleTransform)、倾斜变换(SkewTransform)、移动变换(TranslateTransform)和两种复杂 的变换:变换组(TransformGroup)、矩阵变换(MatrixTransform ),这些变换可以运用到任何控件或者图形图像。这里用到的是TranslateTransform

posted on 2008-06-03 17:14  leanco  阅读(739)  评论(0)    收藏  举报

导航