Drag and Drop a WPF User Control

I create a moved usercontrol

<UserControl x:Class="Restaurant.Views.Managerer.TablePanel" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Restaurant.Helpers.Converter" mc:Ignorable="d" x:Name="root" MouseLeftButtonDown="root_MouseLeftButtonDown" MouseLeftButtonUp="root_MouseLeftButtonUp" MouseMove="root_MouseMove" DataContext="{Binding RelativeSource={RelativeSource Self}}"> .... 

the code

 Point anchorPoint; Point currentPoint; bool isInDrag = false; private void root_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { var element = sender as FrameworkElement; anchorPoint = e.GetPosition(null); element.CaptureMouse(); isInDrag = true; e.Handled = true; } private void root_MouseMove(object sender, MouseEventArgs e) { if (isInDrag) { var element = sender as FrameworkElement; currentPoint = e.GetPosition(null); var transform = new TranslateTransform { X = (currentPoint.X - anchorPoint.X), Y = (currentPoint.Y - anchorPoint.Y) }; this.RenderTransform = transform; anchorPoint = currentPoint; } } private void root_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { if (isInDrag) { var element = sender as FrameworkElement; element.ReleaseMouseCapture(); isInDrag = false; e.Handled = true; } } 

if you change the code

 X = (currentPoint.X - anchorPoint.X), Y = (currentPoint.Y - anchorPoint.Y) 

to

 X = (currentPoint.X), Y = (currentPoint.Y) 

I can move usercontrol, but mouse and usercontrol do not match

+7
source share
3 answers

Good morning. I slept and can think)))

  private TranslateTransform transform = new TranslateTransform(); private void root_MouseMove(object sender, MouseEventArgs e) { if (isInDrag) { var element = sender as FrameworkElement; currentPoint = e.GetPosition(null); transform.X += currentPoint.X - anchorPoint.X; transform.Y += (currentPoint.Y - anchorPoint.Y); this.RenderTransform = transform; anchorPoint = currentPoint; } } 
+14
source

I'm really not sure what exactly you are trying to accomplish in your question, but Thumbs is a lot easier to drag and drop. You can see the explanation and sample code (below) here .

+6
source

Based on the information in @Mediator's answer. I went up and edited to prevent going out of limits.

 private TranslateTransform transform = new TranslateTransform(); private void root_MouseMove(object sender, MouseEventArgs e) { if (isInDrag) { var element = sender as FrameworkElement; currentPoint = e.GetPosition(null); transform.X += currentPoint.X - anchorPoint.X; transform.Y += (currentPoint.Y - anchorPoint.Y); if (currentPoint.X < Application.Current.MainWindow.RenderSize.Width && currentPoint.Y < Application.Current.MainWindow.RenderSize.Height && currentPoint.X > 0 && currentPoint.Y > 0 ) { this.RenderTransform = transform; anchorPoint = currentPoint; } else { transform = new TranslateTransform(); this.RenderTransform = transform; } } } 

But binding errors are theirs in the output window in VS.

This seems to be a problem in WPF, but Microsoft will not solve it.

For more information here:

https://connect.microsoft.com/VisualStudio/feedback/details/1423399/system-windows-data-error-4-when-using-relativesource-findancestor-inside-a-translatetetformforminside-a-style

-2
source

All Articles