Я разместил текстовые блоки на холсте. Я меняю их положение при перетаскивании мышью, используя следующий код:
protected bool isDragging;
private Point clickPosition;
private void txt_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
isDragging = true;
var draggableControl = sender as TextBlock;
clickPosition = e.GetPosition(this);
draggableControl.CaptureMouse();
}
private void txt_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
isDragging = false;
var draggable = sender as TextBlock;
draggable.ReleaseMouseCapture();
}
private void txt_MouseMove(object sender, MouseEventArgs e)
{
var draggableControl = sender as TextBlock;
if (isDragging && draggableControl != null)
{
Point currentPosition = e.GetPosition(this.Parent as UIElement);
var transform = draggableControl.RenderTransform as TranslateTransform;
if (transform == null)
{
transform = new TranslateTransform();
draggableControl.RenderTransform = transform;
}
transform.X = currentPosition.X - clickPosition.X;
transform.Y = currentPosition.Y - clickPosition.Y;
}
}
Здесь я хочу получить новую позицию текстового блока, сохранить его и в следующий раз, когда приложение загрузится, элемент управления должен занять новую позицию. Я понимаю, что мой код не изменяет свойство Left & Top текстового блока, а вместо этого преобразует его. Следовательно, свойство Left и Top не будет изменено.
Я пытался установить свойство Left и Top как
draggableControl.SetValue(Canvas.LeftProperty, transform.X);
draggableControl.SetValue(Canvas.TopProperty, transform.Y);
Но это также не меняет его.
Что можно сделать, чтобы достичь желаемого?