Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Documents;
- using System.Windows.Media;
- using System.Windows.Media.Animation;
- namespace WpfApplication1 {
- /// <summary>
- /// MainWindow.xaml 的交互逻辑
- /// </summary>
- public partial class MainWindow {
- public MainWindow() {
- InitializeComponent();
- }
- private DragDropAdorner adorner;
- private void Item_MouseDown(object sender, RoutedEventArgs e) {
- var item = ((ListBoxItem) sender);
- Point startPos = item.TranslatePoint(MouseUtilities.CorrectGetPosition(item), MainGrid);
- var layer = AdornerLayer.GetAdornerLayer(MainGrid);
- layer.IsHitTestVisible = false;
- adorner = new DragDropAdorner(item, MouseUtilities.CorrectGetPosition(MainGrid), (Vector) startPos) {
- Opacity = 0.6
- };
- layer.Add(adorner);
- if (DragDrop.DoDragDrop(item, item.Content, DragDropEffects.Move) != DragDropEffects.Move) {
- var anime = new PointAnimation(adorner.StartPoint, new Duration(TimeSpan.FromSeconds(0.5))) {
- EasingFunction = new QuarticEase { EasingMode = EasingMode.EaseOut }
- };
- anime.Completed += (sender1, e1) => layer.Remove(adorner);
- adorner.BeginAnimation(DragDropAdorner.PositionProperty, anime);
- } else {
- layer.Remove(adorner);
- }
- }
- private void Item_QueryContinueDrag(object sender, QueryContinueDragEventArgs e) {
- adorner.Position = MouseUtilities.CorrectGetPosition(MainGrid);
- }
- private void Item_Drop(object sender, DragEventArgs e) {
- var target = (ListBoxItem) sender;
- var source = ((ListBoxItem) adorner.AdornedElement);
- var temp = source.Content;
- source.Content = target.Content;
- target.Content = temp;
- }
- }
- public class DragDropAdorner : Adorner {
- public Point Position {
- get { return (Point) GetValue(PositionProperty); }
- set { SetValue(PositionProperty, value); }
- }
- public static readonly DependencyProperty PositionProperty =
- DependencyProperty.Register("Position", typeof (Point), typeof (DragDropAdorner), new PropertyMetadata(
- (sender, e) => ((DragDropAdorner) sender).InvalidateVisual()));
- public Vector Vector { get; private set; }
- public Point StartPoint { get; private set; }
- public DragDropAdorner(UIElement element, Point startPoint, Vector vector = default(Vector))
- : base(element) {
- StartPoint = startPoint;
- Vector = vector;
- Position = startPoint;
- }
- protected override void OnRender(DrawingContext drawingContext) {
- base.OnRender(drawingContext);
- drawingContext.DrawRectangle(new VisualBrush(AdornedElement),
- null, new Rect(Position - Vector, RenderSize));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment