2011년 10월 18일 화요일
[Silverlight] Drag & Drop
현재는 지정한 컨트롤의 모든영역에서 이벤트가 발생됨;;
특정 컨트롤에만 적용시키기위해서는 좀더 업데이트를 해야됨
Usage : DragnDropUtil.newInstance([Control]);
namespace Util
{
/// <summary>
/// Drag & Drop 적용
/// </summary>
public partial class DragnDropUtil
{
private System.Windows.Controls.Control control;
private bool isTrackingMouse = false;
private Point mouseOffset;
TranslateTransform renderTransform;
private DragnDropUtil(System.Windows.Controls.Control control)
{
this.control = control;
this.control.RenderTransform = renderTransform = new TranslateTransform();
this.control.MouseLeftButtonUp += new MouseButtonEventHandler(MouseLeftButtonUp);
this.control.MouseLeftButtonDown += new MouseButtonEventHandler(MouseLeftButtonDown);
this.control.MouseMove += new MouseEventHandler(MouseMove);
}
internal static DragnDropUtil newInstance(System.Windows.Controls.Control control)
{
return new DragnDropUtil(control);
}
void MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
mouseOffset = e.GetPosition(null);
control.CaptureMouse();
isTrackingMouse = true;
}
void MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
control.ReleaseMouseCapture();
isTrackingMouse = false;
}
void MouseMove(object sender, MouseEventArgs e)
{
if (isTrackingMouse)
{
Point point = e.GetPosition(null);
double x0 = this.renderTransform.X;
double y0 = this.renderTransform.Y;
this.renderTransform.X = x0 + point.X - mouseOffset.X;
this.renderTransform.Y = y0 + point.Y - mouseOffset.Y;
mouseOffset = point;
}
}
}
}
2011년 10월 8일 토요일
피드 구독하기:
글 (Atom)