zoukankan      html  css  js  c++  java
  • Silverlight控件的拖拽与缩放

    源代码下载(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;
                    }
                }
            }
     
        }

      }


     

  • 相关阅读:
    C++ 派生类成员的访问属性
    C++ 继承和派生介绍
    CSAPP lab2 二进制拆弹 binary bombs phase_5
    C++ new和delete 堆和栈
    Substrings (C++ find函数应用)
    CSAPP lab2 二进制拆弹 binary bombs phase_4
    CSAPP lab2 二进制拆弹 binary bombs phase_3
    C++ 实验 使用重载运算符实现一个复数类
    C++ 操作符重载
    UVALive 4877 Non-Decreasing Digits 数位DP
  • 原文地址:https://www.cnblogs.com/timy/p/1985762.html
Copyright © 2011-2022 走看看