在窗口存储应用程序中拖动画布xaml上的元素并控制其移动

时间:2014-05-10 09:22:57

标签: c# xaml windows-store-apps windows-8.1

我想在画布上拖动多个项目,我使用以下链接 this

它正在拖动但它已经超出了画布我希望它只限制它在画布中的位置。将aur值偏移到+/- ??

感谢。

1 个答案:

答案 0 :(得分:1)

您必须在画布上添加剪裁区域

默认剪切值为null。 (没有剪辑)

canvas.Clip = new RectangleGeometry();
canvas.Clip.Rect = new Rect(0, 0, canvas.ActualWidth, canvas.ActualHeight);

...

如果您因为包含ManipulationModes.TranslateInertia而丢失了控制权(使用ManipulationMode.All)并且当您快速滑动dragableItem时很难控制,请尝试将ManipulationMode设置为此

DragableItem.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY;

...

用于在翻译前检查边界

void DragableItem_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
    var translate = (TranslateTransform)DragableItem.RenderTransform;

    var newPosX = Canvas.GetLeft(DragableItem) + translate.X + e.Delta.Translation.X;
    var newPosY = Canvas.GetTop(DragableItem) + translate.Y + e.Delta.Translation.Y;

    if( ! isBoundary(newPosX,parentCanvas.ActualWidth - DragableItem.ActualWidth,0) )
        translate.X += e.Delta.Translation.X;
    if( !isBoundary(newPosY,parentCanvas.ActualHeight - DragableItem.ActualHeight,0))
        translate.Y += e.Delta.Translation.Y;

}
bool isBoundary(double value,double max,double min)
{
    return value > max ? true : value < min ? true : false;
}