I have created a usercontrol which uses
<UserControl .......
MouseMove="UserControl_MouseMove"
MouseLeftButtonUp="UserControl_MouseLeftButtonUp">
and I have created a singleton class which only updates once the parameter changes:
public class PopUpMovement
{
private PopUpMovement() { }
private static PopUpMovement _instance;
private static readonly object _instanceLock = new object();
public static PopUpMovement Instance()
{
if (_instance == null)
{
lock (_instanceLock)
{
if (_instance == null)
{
_instance = new PopUpMovement();
}
}
}
return _instance;
}
public bool draggingPopup { get; set; }
public bool CustomTablePopupClicked { get; set; }
}
My code in the code behind of usercontrol:
private Point startPoint;
private double initialHorizontalOffset;
private double initialVerticalOffset;
private Point initialMousePosition;
private Point startDragPoint;
//private bool CustomTablePopupClicked;
private void UserControl_MouseMove(object sender, MouseEventArgs e)
{
if (PopUpMovement.Instance().draggingPopup)
{
else if (PopUpMovement.Instance().CustomTablePopupClicked)
{
Point currentMousePosition = e.GetPosition(this); // Get the mouse position relative to the UserControl
double offsetX = currentMousePosition.X - initialMousePosition.X;
double offsetY = currentMousePosition.Y - initialMousePosition.Y;
CustomTablePopup.HorizontalOffset += offsetX;
CustomTablePopup.VerticalOffset += offsetY;
initialMousePosition = currentMousePosition; // Update initial position
}
}
}
private void UserControl_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if(PopUpMovement.Instance().draggingPopup == true)
{
PopUpMovement.Instance().draggingPopup = false;
PopUpMovement.Instance().CustomTablePopupClicked = false;
Mouse.Capture(null);
}
}
private void CustomTablePopup_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
// Store the mouse position
//draggingPopup = true;
//PopUpMovement popUpMovement = PopUpMovement.Instance();
//popUpMovement.draggingPopup = true;
PopUpMovement.Instance().draggingPopup = true;
initialMousePosition = e.GetPosition(this); // Get the mouse position relative to the Window
Mouse.Capture(this); // Capture mouse at the UserControl level
}
It works fine if the user moves the popup window for the first time, however, if the user wants to move it again nothing happens it stays fixed. So, How can I fix the code so that the user can move the popup box anywhere the user wants?