2014-04-04 48 views
4

我有一個應用程序,用戶可以使用從列表中選擇的元素進行操作,這是通過單擊列表元素並將元素添加到畫布來完成的。從列表中拖放到MVVM的windows phone上的畫布

在用戶測試應用程序期間。人們發現它不直觀,因爲他們想要拖放。我找到了幾個鏈接來描述如何爲WPF實現這一點,即不適用於Windows Phone。

試圖從msdn project複製代碼我最終遇到了問題,我無法從DragEventArgs獲取有關元素的相同信息。

所以我想完成的是用戶可以將列表框中的元素拖到畫布上。我曾嘗試過ViewModel,但在DragEventArgs中缺少信息,例如e.Data和e.Source。我也嘗試在xaml.cs文件中沒有成功。

任何幫助表示讚賞。

理念

  • 創建元素的副本時,它的選擇,
  • 添加副本作爲畫布的孩子,
  • 設置複印的x,y座標來選擇匹配元素的位置,
  • CaptureMouse()在副本上。

當然,在Windows Phone操作增量應該用來移動它而不是捕獲鼠標。在Click事件添加後,我可以在Canvas中拖動一個元素。但我似乎無法從列表中拖拽工作。上面的要點是我已經嘗試的一種方法,但迄今爲止沒有取得任何成功。

回答

1

目前不存在樣品或任何做到這一點。我已經聯繫了msdn和微軟的人員,但沒有取得任何成功。我試圖建立一個樣本,但迄今沒有成功。

編輯

所以我做了什麼來解決這個問題:第一個問題圖形 enter image description here

在口頭上拖動從Control一個元素到畫布上。所以我做了我加處理程序,這樣的列表框,在視圖中:

 MyLB.AddHandler(UIElement.ManipulationStartedEvent, new EventHandler<ManipulationStartedEventArgs>(MyLB_ManiStarted), true); 
     MyLB.AddHandler(UIElement.ManipulationDeltaEvent, new EventHandler<ManipulationDeltaEventArgs>(MyLB_ManiDelta), true); 
     MyLB.AddHandler(UIElement.ManipulationCompletedEvent, new EventHandler<ManipulationCompletedEventArgs>(MyLB_ManiCompleted), true); 

而且我添加一個額外的帆布,這裏簡稱爲Canvas2,綿延列表框和畫布後面。 兩個畫布'之間的唯一區別是大小,否則他們有相同的項目控制,但不同的observablecollections綁定到畫布'。

  1. 在ManipulationStarted中,我找到該元素並向Canvas2的observablecollection添加一個新元素。此外,我將Canvas2的zindex設置爲盈方。
  2. 然後我點擊delta事件來移動Canvas2上的元素在ManipulationCompleted中檢查元素是否在第一個Canvas的範圍內。
  3. 我再從Canvas2刪除和移動Canvas2到後面,用Canvas.SetIndex(UIElement, zIndex)
  4. 根據邊界檢查(3)然後,我把它添加到第一畫布。一切正常。

但我不使用拖放功能或相關事件,因爲它似乎沒有幫助,因爲缺少可拖動元素。但是這個工作:)

0

WP7上的Silverlight不支持拖放 - 至少不是完全的。它支持拖動而不是拖放。

不管怎麼說,你可以嘗試用下面的例子東西,

WP7 Drag & Drop Example

+0

我已經啓用拖動畫布。而且我可以在WP8中看到allowdrop存在。這是從wp7開始更新的。但是我一直無法使它工作。 – JTIM