现在的位置: 首页 > 综合 > 正文

Silverlight控件的拖拽与缩放

2012年11月24日 ⁄ 综合 ⁄ 共 3931字 ⁄ 字号 评论关闭

 

源代码下载(vs2010版本):/Files/timy/dragAndreSize.rar

 

以下是拖放控件的实例代码:

<UserControl x:Class="SilverlightApplication26.Page"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width
="400" Height="300">
    
<Grid x:Name="LayoutRoot" Background="#FFD9D7D7">
        
<StackPanel>
            
<Border Width="100" Height="50" CornerRadius="5"  BorderBrush="Black" BorderThickness="3" MouseLeftButtonDown="Border_MouseLeftButtonDown" MouseMove="Border_MouseMove" MouseEnter="Border_MouseEnter" MouseLeave="Border_MouseLeave"  MouseLeftButtonUp="Border_MouseLeftButtonUp">
                
<Button></Button>
            
</Border>
        
</StackPanel>
      
     
    
</Grid>
</UserControl>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
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.Xml;
using System.Windows.Media.Imaging;
using System.Windows.Resources;
using System.IO;
using System.Windows.Browser;
using System.ServiceModel.Channels;
using System.ServiceModel;
using System.Windows.Threading;
using System.Threading;
 
namespace SilverlightApplication26
{
    
public partial class Page : UserControl
    {
 
        
public Page()
        {
            InitializeComponent();

        }
 
        bool captured = false;
        
double ox = -1, oy = -1;
        
enum State { None, Left, Buttom, Top, Right };
        State currentstate;
        
private void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            Border b 
= (Border)sender;
            b.CaptureMouse();
            captured 
= true;
        }
        
private void Border_MouseMove(object sender, MouseEventArgs e)
        {
            CheckCursor(sender, e);
            
if (captured)
            {
                Border b 
= (Border)sender;
                Point p 
= e.GetPosition(null);
                
if (ox != -1)
                {
                    
switch (currentstate) 
                    {
                        
case State.Right: { b.Width += (p.X - ox)*2break;}
                        
case State.Buttom: { b.Height += (p.Y - oy)*2break; }
                        
case State.Top: { b.Height += (oy - p.Y)*2break; }
                        
case State.Left: { b.Width += (ox - p.X)*2break; }
                    }
                   
                }
                ox 
= p.X;
                oy 
= p.Y;
            }
        }
        
private void Border_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            Cursor 
= Cursors.Arrow;
            Border b 
= (Border)sender;
            b.ReleaseMouseCapture();
            captured 
= false;
            ox 
= -1; oy = -1;
        }
        
private void Border_MouseLeave(object sender, MouseEventArgs e)
        {
if(!captured)
            Cursor 
= Cursors.Arrow;
        }
        
private void Border_MouseEnter(object sender, MouseEventArgs e)
        {
    
            CheckCursor(sender, e);
        }
        
void CheckCursor(object sender, MouseEventArgs e)
        {
            Border b 
= (Border)sender;
            Point p 
= e.GetPosition(b);
            
if (p.X >= b.ActualWidth - b.BorderThickness.Right || p.X <= b.BorderThickness.Left)
            {
                Cursor 
= Cursors.SizeWE;
                
if (p.X >= b.ActualWidth - b.BorderThickness.Right) { currentstate = State.Right; }
                
else { currentstate = State.Left; }
            }
            
else if (p.Y >= b.ActualHeight - b.BorderThickness.Bottom || p.Y <= b.BorderThickness.Top)
            {
                Cursor 
= Cursors.SizeNS;
                
if (p.Y >= b.ActualHeight - b.BorderThickness.Bottom) { currentstate = State.Buttom; }
                
else
                {
                    currentstate 
= State.Top;
                }
            }
        }
 
    }

  }

 

 

抱歉!评论已关闭.