2009-10-12 3 views
9

포함 된 이미지 (빌드 작업 '리소스')에 대한 경로가 포함 된 이미지 컨트롤이 있습니다.포함 된 이미지가 UserControl에있을 때 표시되지 않는다

내 MainPage.xaml의 컨테이너에 추가하면 이미지가 잘 보입니다. 아래 그림과 같이 UserControl에서 동일한 이미지를 사용하고 MainPage.xaml에 해당 UserControl의 인스턴스를 추가하면 이미지가 나타나지 않습니다.

<UserControl x:Class="HomePage.Views.SimpleUserContol" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > 
    <Grid x:Name="LayoutRoot" > 
     <Image Source="Assets/images/image.png" Stretch="None" /> 
    </Grid> 
</UserControl> 

왜 이런 일이 일어나고 있는지 해결책을 제시 할 수있는 사람이 있습니까?

건배, J

(I 실버 라이트에서 일하고 있어요하지만 같은 것은 아마도 WPF에서 일어나는 생각)

편집 :

<Image Source="/Assets/images/image.png" Stretch="None" /> 
설정

은 빌드 작업을 설정할 때 잘 작동합니다. 그러나 '자원'을 사용할 때는 작동하지 않습니다. 문제는 파일 구조에서 상대적인 위치라는 것입니다. add ../가 잘 작동합니다. 가능한 경우 어셈블리에서 이미지를 얻을 수있는 솔루션을 원합니다.

답변

16

경로가 아닌 리소스로 참조해야합니다. 이 그것이 WPF 응용 프로그램에서 수행하는 방법이다 :

<Image Source="/MyAppName;component/images/image.png" Stretch="None" /> 

원본 이미지가 이미지에 위치/image.png를

참고 :
나는, 실버 라이트 경험이 없지만, 당신은 아마 WPF에서 비슷하다고 말했기 때문에 나는 이것을 제안했다 ...

0

문제는 ressources (논리 경로에서 가져온 이미지)에 포함 된 이미지의 "가상"네임 스페이스와 관련이 있다고 생각합니다. 귀하의 usercontrol 네임 스페이스와의 차이.

8

이미지의 상대 경로를 사용하고 있습니다. UserControl 하위 디렉터리에있는 경우 상대 경로 더 이상 유효하지 않습니다. "/Assets/images/image.png" 또는 "pack://application:,,,/Assets/images/image.png"과 같은 절대 경로를 사용해야합니다 (UserControl이 다른 어셈블리에서 사용되는 경우이 마지막 버전 사용).

0

'/'를 사용하여 사이트의 루트로 이동하는 것은 사이트의 루트가 서브 디렉토리에없는 경우에만 작동한다. 즉, 메인 사이트의 하위 디렉토리 인 관리 사이트 (http://www.somesite.com/admin). 이 경우 '/assets/images/image.png'를 사용하면 먼저 상위 사이트로 이동합니다. 이미지를 다음과 같이 참조 할 수 있습니다. '~/assets/images/image.png'

3

빌드 유형을 컨텐츠에서 리소스로 변경해야한다면 깨끗하게 빌드하십시오. 나는 정확한 위치 (다른 프로젝트의 리소스, 빌드 유형 등)를 가지고 있었지만 이미지 폴더에 새 이미지를 추가하기 전까지는 작동하지 않았습니다. 이미지 폴더에 이전 상태가 지워졌을 때까지는 작동하지 않았습니다.

실제로 이미지가있는 프로젝트에서 bin 및 obj 폴더를 수동으로 삭제하십시오.

0

"+"와 같이 파일 이름이 인코딩되어야하는 특수 문자가있는 이미지도 발견되었습니다. %2b도 문제를 일으킬 수 있습니다.

이스케이프 문자가 포함되었을 수있는 이미지의 이름을 변경하는 것이 좋습니다.

관련 문제