2014-04-04 2 views
4

사용자가 목록에서 선택한 요소로 조작 할 수있는 앱이 있습니다. 목록 요소를 클릭하면 요소가 캔버스에 추가됩니다.MVVM을 사용하여 Windows Phone에서 목록에서 캔버스로 끌어서 놓기

사용자가 앱을 테스트하는 동안. 사람들은 끌어서 놓기를 원했기 때문에 직관적이지 않은 것으로 나타났습니다. WPF 용으로 구현하는 방법을 설명하는 여러 링크를 발견했습니다. 즉, Windows Phone 용이 아닙니다.

msdn project에서 코드를 복제하려고하면 DragEventArgs에서 요소에 대한 동일한 정보를 얻을 수 없다는 문제가 발생했습니다.

그래서 내가 원하는 것은 사용자가 목록 상자의 요소를 캔버스로 드래그 할 수 있다는 것입니다. ViewModel에서 시도했지만 e.Data 및 e.Source와 같은 DragEventArgs의 정보가 누락되었습니다. xaml.cs 파일에서도 성공하지 못했습니다.

도움을 주시면 감사하겠습니다. 이 선택이되면

아이디어

  • 이 사본의 X를 설정,
  • 는 캔버스의 자식으로 사본을 추가하여 요소의 복사본을 생성은, y는 선택한 일치하도록 조정 요소 위치,
  • 복사본의 CaptureMouse().

물론 Windows Phone 조작 델타에서 캡처 마우스 대신 이동하려면 사용해야합니다. Click 이벤트에 의해 추가 된 후에 Canvas 내부에서 요소를 드래그 할 수 있습니다. 하지만 목록에서 일하기가 힘들어 보이지는 않습니다. 위의 글 머리 기호는 내가 가지고있는 방법이며 시도하고 있지만 지금까지 성공하지 못했습니다.

답변

1

이 작업을 수행 할 샘플 또는 아무것도가 존재하지 않는, 다음과 같은 예를 들어 뭔가를 시도 할 수 있습니다. 나는 아무런 성공도없이 msdn 및 Microsoft에 연락했습니다. 나는 샘플을 만들려고 노력하고 있지만 지금까지 성공하지 못했습니다.

편집

그래서이 문제를 해결하기 위해 무슨 짓을했는지 : 첫 번째 문제 캔버스에 목록 상자에서 요소를 끌어 즉 그래픽 enter image description here

합니다. 내가 무슨 짓을했는지 내가보기에,이 같은 목록 상자에 처리기를 추가 :

 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로 불리는 추가 캔버스를 추가합니다. 두 캔버스 사이의 유일한 차이점은 '크기입니다. 그렇지 않으면 캔버스에 바인딩 된 다른 관찰 가능 컬렉션이있는 동일한 itemscontrol을가집니다.'

  1. ManipulationStarted에서 나는 요소를 찾고 Canvas2의 observablecollection에 새로운 요소를 추가합니다. 게다가 나는 Canvas2의 zindex를 infront로 설정합니다.
  2. 델타 이벤트를 탭하여 Canvas2에서 요소를 이동합니다.
  3. ManipulationCompleted에서 요소가 첫 번째 캔버스의 경계 안에 있는지 확인합니다.
  4. 캔버스 2에서 캔버스 2를 삭제하고 캔버스 2를 뒤쪽으로 이동합니다. Canvas.SetIndex(UIElement, zIndex)
  5. 범위에 따라 (3)을 확인한 다음 첫 번째 캔버스에 추가합니다. 모든 것이 작동합니다.

드래그 가능한 요소가 없어서 드롭 기능이나 관련 이벤트를 사용하지 않았으므로 사용하지 않았습니다. 하지만이 작품 :)

0

WP7의 Silverlight는 끌어서 놓기를 지원하지 않습니다. 적어도 완전히는 지원하지 않습니다. 드래그는 지원하지만 드롭은 지원하지 않습니다.

어쨌든 당신은

WP7 Drag & Drop Example

+0

나는 캔버스에서 드래그를 활성화했습니다. WP8에서 allowdrop이 존재한다는 것을 알 수 있습니다. 이것은 wp7 이후로 업데이트되었습니다. 그러나 나는 그것을 작동하게 만들지 못했습니다. – JTIM