通过拖放移动 Canvas 上的控件
Moving a Control on a Canvas on Drag & Drop
我在 canvas 上放置了文本块。我使用以下代码更改鼠标拖动的位置:
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);
但它也没有改变它。
如何才能达到预期效果?
您不能使用转换...只能使用
draggableControl.SetValue(Canvas.LeftProperty, X);
draggableControl.SetValue(Canvas.TopProperty, Y);
因为变换只影响渲染
我在 canvas 上放置了文本块。我使用以下代码更改鼠标拖动的位置:
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);
但它也没有改变它。
如何才能达到预期效果?
您不能使用转换...只能使用
draggableControl.SetValue(Canvas.LeftProperty, X);
draggableControl.SetValue(Canvas.TopProperty, Y);
因为变换只影响渲染