2010-07-30 8 views
0

제목은 약간의 거짓말이지만 문제를 정의합니다.프로그래밍 방식으로 생성 된 이미지에는 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); 

답변

1

:

이것은 내가 만드는 데 사용하고있는 코드/새로운 이미지를 추가 할 것입니다 Canvas 클래스의 메서드.

Canvas.SetLeft(newItem, 10d); 

More Info at Canvas.SetLeft Method MSDN Article 오른쪽, 위쪽 및 아래쪽 속성과 동일합니다.

+0

감사합니다. 저는 이것을 알고 있습니다. 모든 드래그/드롭 항목이 XAML을 통해 캔버스에 그려진 이미지에 대해 잘 작동하지만 프로그래밍 방식으로 onmousedown에 추가 된 값은 아무런 가치가 없습니다. –

+0

아, 제가 제안을 통해 해결했습니다. 나는 그것을 처음 설정할 필요가 있음을 깨달았다. –

+0

참고 : 위의 코드에이 두 줄을 추가했다. Canvas.SetLeft (newItem, 0); Canvas.SetTop (newItem, 0); –

관련 문제