제목은 약간의 거짓말이지만 문제를 정의합니다.프로그래밍 방식으로 생성 된 이미지에는 CanvasLeft가 없습니다.
루트 요소가 Canvas 인 WPF 창에 이미지가 있습니다.이 이미지에는 창 주위로 드래그 할 수있는 다양한 이벤트 처리기가 연결되어 있습니다.
이 모든 것은 정상적으로 작동하지만 캔버스에 새 이미지를 추가 할 때 자식과 동일한 이벤트 처리기를 바인딩 할 때 이미지가 이동하지 않습니다.
이제이 (모든 처리기가 잘 바인딩되어 있음) 추적했는데 어떤 이유로 내 MouseDownEvent에서 Canvas.GetLeft (((Image) 보낸 사람)) 속성이 항상 NaN 인 것으로 보입니다. 캔버스의 하단에 부착 속성을 사용하면 (측면) 정적 설정을 사용해야합니다 CALSS 왼쪽, 오른쪽, 위쪽을 설정하려면
// Just a class inheriting from Image
DraggableMediaItem newItem = new DraggableMediaItem();
Uri uri = new Uri(ofd.FileName, UriKind.Absolute);
BitmapImage icon = new BitmapImage(uri);
newItem.Source = icon;
newItem.PreviewMouseDown += new MouseButtonEventHandler(DragMe_MouseDown);
newItem.PreviewMouseMove += new MouseEventHandler(DragMe_MouseMove);
newItem.PreviewMouseUp += new MouseButtonEventHandler(DragMe_MouseUp);
newItem.TextInput += new TextCompositionEventHandler(DragMe_TextInput);
newItem.LostMouseCapture += new MouseEventHandler(DragMe_LostMouseCapture);
RootCanvas.Children.Add(newItem);
감사합니다. 저는 이것을 알고 있습니다. 모든 드래그/드롭 항목이 XAML을 통해 캔버스에 그려진 이미지에 대해 잘 작동하지만 프로그래밍 방식으로 onmousedown에 추가 된 값은 아무런 가치가 없습니다. –
아, 제가 제안을 통해 해결했습니다. 나는 그것을 처음 설정할 필요가 있음을 깨달았다. –
참고 : 위의 코드에이 두 줄을 추가했다. Canvas.SetLeft (newItem, 0); Canvas.SetTop (newItem, 0); –