Windows 8应用程序:“捕捉”卡片游戏的拖放

时间:2013-04-11 16:11:42

标签: c# xaml drag-and-drop windows-store-apps user-interaction

在尝试使用以下代码段移动卡片(现在的图片)后,我对结果不满意。

Card.ManipulationDelta += (o, args) => {
    var dragableItem = o as Image;
    if (dragableItem == null) return;
    var translateTransform = dragableItem.RenderTransform as TranslateTransform;

    if (translateTransform == null) return;
    translateTransform.X += args.Delta.Translation.X;
    translateTransform.Y += args.Delta.Translation.Y;
};
Card.RenderTransform = new TranslateTransform();

控件有一个有趣的行为加速,并在“掉落”之后移动/滑动一下。虽然很酷我不想要这种行为因此改变了我的想法:我正在寻找的是一个解决方案来定义一个活动卡的特定区域,一个更多卡的工作台和甲板的堆栈,这样一个人可以自由拖动一张卡但如果超过这些特定区域则只能丢弃,否则它将返回指定的手牌区域。

我可以尝试实施此期望的行为吗?

1 个答案:

答案 0 :(得分:0)

我认为你和我在同一条船上,我正在开发一个Metro卡游戏应用程序,而且就拖拽而言,我对我所发现的内容并不满意。我的初始方法是使用grid \ stackpanel或其他底层框架,用户可以将卡片图像(通常是自定义控件)拖过,然后当用户放手时图像会捕捉到该框架。我还没有找到一种合适的方法来获取这种行为,但是因为看起来在Metro中不支持从一个父级到另一个父级的控件拖放。

就你的问题而言,你所指的滑动效果很可能是intertia,你可以通过不设置TranslateInertia模式来禁用它,例如

    Ellipse el = new Ellipse();
    el.Fill = new SolidColorBrush(Windows.UI.Colors.Magenta);
    el.ManipulationMode = (ManipulationModes.All ^ MainipulationModes.TranslateInteria);

    //more code to add your ManipulationDelta handler etc.

你也可以通过为MainipulationInertiaStarting添加一个处理程序来获得对Interia的一些控制,尽管在处理程序中设置e.Handled = true并不像其他人所建议的那样完全禁用interia。

我很想听到您的回复,看看您为卡片拍摄的方法是什么,此时我正在考虑使用大型Canvas对象并编写自己的客户处理程序以移动鼠标卡片对象可以拖动,然后卡入游戏板上的一行或其他位置。

干杯,

詹姆斯