Welcome to Microsoft Q&A platform!
You didn't provide full code,but you can see my example.
xaml:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Canvas Grid.Column="0" Background="AliceBlue">
<local:MyUserControl Width="40" Height="40" Background="Red" x:Name="usercontrol1" Canvas.Top="100" Canvas.Left="100" />
</Canvas>
</Grid>
C#
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
usercontrol1.PreviewMouseMove += new MouseEventHandler(Element_MouseMove);
usercontrol1.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(Element_MouseLeftButtonDown);
usercontrol1.PreviewMouseLeftButtonUp += new MouseButtonEventHandler(Element_MouseLeftButtonUp);
}
bool isDragDropInEffect = false;
Point pos = new Point();
void Element_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
isDragDropInEffect = true;
pos = e.GetPosition(null);
usercontrol1.CaptureMouse();
usercontrol1.Cursor = Cursors.Hand;
}
void Element_MouseMove(object sender, MouseEventArgs e)
{
if (isDragDropInEffect)
{
double xPos = e.GetPosition(null).X - pos.X + (double)usercontrol1.GetValue(Canvas.LeftProperty);
double yPos = e.GetPosition(null).Y - pos.Y + (double)usercontrol1.GetValue(Canvas.TopProperty);
usercontrol1.SetValue(Canvas.LeftProperty, xPos);
usercontrol1.SetValue(Canvas.TopProperty, yPos);
pos = e.GetPosition(null);
}
}
void Element_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if (isDragDropInEffect)
{
isDragDropInEffect = false;
usercontrol1.ReleaseMouseCapture();
}
if ((double)usercontrol1.GetValue(Canvas.LeftProperty) < 50)
{
double i = -30;
usercontrol1.SetValue(Canvas.LeftProperty, i );
}
}
}
public class MyUserControl : UserControl
{
}
Thanks.