2013-04-11 66 views
2

嘗試使用下面的代碼片段移動卡片(現在的圖片)時,我對結果並不滿意。Windows 8應用程序:「捕捉」卡片遊戲的拖放

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(); 

該控制有一個有趣的行爲加速,並將其「放下」後移動/滑動一下。雖然很酷,但我不想要這種行爲,因此改變了我的想法:我正在尋找的解決方案是爲一張活動卡片定義特定區域,爲甲板上的多張卡片和堆疊定義一個長凳,以便可以自由拖拽一張卡,但只有當它位於這些特定區域上方時才能被丟棄,否則它將返回到爲卡片指定的區域。

我可以嘗試實現這種所需的行爲?

回答

0

我認爲你和我在同一條船上,我正在製作一個地鐵卡遊戲應用程序,並且我並不十分滿意我所發現的拖放功能。我的初始方法是使用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. 

你也可以得到一定的控制在Interia上添加一個MainipulationInertiaStarting處理程序,雖然只是在處理程序中設置e.Handled = true並不像其他人所暗示的那樣禁用interia。

我很想聽到你回來,看看你拿出什麼辦法來捕捉卡片,在這一點上,我正在考慮只使用一個大的畫布對象,並寫下我自己的客戶處理程序鼠標移動到讓卡片對象可以拖動,然後卡入遊戲板上的一排或其他位置。

乾杯,

詹姆斯