2010-06-25 6 views
0

Canvas에 이미지 개체가 있습니다. 나는 그것에 소스를 설정하지 않았지만 좌표와 크기가 있습니다. 태그는 다음과 같습니다.SIlverlight : Canvas에서 이미지를 찾을 수 없습니다.

< 이미지 Canvas.Top = "50"Height = "68"Width = "110"HorizontalAlignment = "Left"Name = "image1"Stretch = "Fill"VerticalAlignment = "Top"/ >

다음은 문제입니다. 마우스를 위로 가져 가면 찾고 싶습니다. 이 코드 : 소스가 설정되어 있지 않으면

VisualTreeHelper.FindElementsInHostCoordinates (점, Application.Current.RootVisual)

이 이미지를 찾을 수 없습니다. 소스가 설정되어 있지 않은 경우, 이미지는 돌려 주어지지 않습니다. 아무도 이유를 아나요? 이것은 나에게 문제를 일으킨다. 일부 드래그/드롭 코드가 있는데 Image 컨트롤에서 뭔가를 놓으려고합니다. 그러나 마우스가 그 위에있을 때를 알아야합니다.

내가 할 수있는 다른 방법이 있다는 것을 알고 있습니다 (예 : 그리드 또는 무언가와 같은 다른 위치에 배치하고 감지하는 등).하지만 작동하지 않습니다. 나는 작동 할 수있는 몇 가지 방법을 생각할 수 있지만, 덜 우아합니다.

위 이미지를 반환하면 이상적입니다.

답변

1

코드에 Point point = e.GetPosition(_canvas);이 있습니다. 이것은 캔버스와 관련하여 MousePosition 좌표를 가져 오지만 두 번째 줄인 VisualHelper.FindElementsInHostCoordinates(point,Application.Current.RootVisual)은 전체 페이지와 관련하여 검색 중입니다. 당신은 하나 또는 다른 것을 같은 컨트롤과 관련하여 바꿀 필요가 있습니다. VisualHelper.FindElementsInHostCoordinates(point,_canvas)

+0

나는 이것이 너무나 명백한 해결책처럼 보였기 때문에 너무 흥분했습니다. 하지만 슬프게도, 그렇지 않았습니다. 사실로 설정해도 효과가 없습니다. 추가 조사에 따르면 기본적으로 true로 설정되었습니다. 고마워, 그래도. – Pete

+0

어디에서'포인트'를 얻고 있습니까? Image 자체의 MouseEvent에서 가져온 것입니까? 다른 점은 참조 객체이므로 Point의 좌표가'Application.RootVisual'과 관련되어 있는지 확인하는 것입니다. – Stephan

+0

이것은 드래그/드롭 코드 용입니다. 문제의 코드는 다음과 같습니다. 포인트 포인트 = e.GetPosition (_canvas); foreach (VisualTreeHelper.FindElementsInHostCoordinates (point, Application.Current.RootVisual))의 UIElement 요소 그 시점의 모든 항목 (배경을 제공하기 위해 사용하는 표 포함)이 표시됩니다. 그 시점에서 드래그하는 이미지, 그리드, 캔버스, 사용자 컨트롤을 볼 수 있습니다. 해당 위치에서 이미지가 나타나지 않을 가능성이 있지만, 그리드가 요소 목록에 더 이상 나타나지 않으면 변경된 모든 것을 제거하려고했습니다. – Pete

0

이미지 개체 주위에 <Border> 개체를 추가 할 수 있습니다.

또는 마우스 커서와 마우스를 놓고 이벤트 처리기를 추가하고 커서를 변경할 수 있습니다.

관련 문제