2010-06-11 5 views
4

이 질문에 대한 나의 동기는 실제로 ImageSource의 종속성 속성을 통해 사용자 정의 컨트롤에서 사용할 이미지를 지정하는 것입니다. 나는 이것에 대한 관리, 접근, 그리고 단위 테스팅과 관련된 몇 가지 어려움을 겪고있다.wpf 이미지 리소스 및 visual studio 2010 리소스 편집기

  • 리소스 편집기는 응용 프로그램의 이미지를 유지 관리하는 데 유용한 도구입니까?
  • 비트 맵을 편집기에서 ImageSource로 변환하는 가장 좋은 방법은 무엇입니까?
  • 편집기에서 파일 이름 리소스를 어떻게 가져올 수 있습니까?
+0

리소스 편집기를 사용하여 이미지를 유지한다는 것은 무엇을 의미합니까? –

+0

리소스 디자이너에 이미지를 추가 한 다음 필요할 때 이미지를 찾는 것이 좋습니다. 또는 그것이 나쁜 생각이라면, 여러개의 어셈블리에 이미지가있을 수있는 사소한 앱을 위해 더 나은 것이 무엇인지. 건배 – Berryl

답변

10

아니요, 리소스 편집기는 이에 적합하지 않습니다.

WPF 응용 프로그램에서 가장 좋은 방법은 모든 이미지를 "이미지"디렉토리에두고 각 이미지를 "자원"으로 표시하는 것입니다. 그런 다음 이미지 컨트롤과 다른 곳에서 직접 참조 할 수 있습니다. 여기

는 정확한 단계는 다음과 같습니다

  • 자르기와 달리 .png 파일로 좋아하는 비트 맵 편집 프로그램 (Paint.NET, 포토샵 등)들을 저장
  • 를 사용하여 이미지를 조정 (또는 .jpg 또는 원하는 경우 .gif)
  • Visual Studio 솔루션 내에서 "이미지"폴더 만들기 (또는 구성하려는 여러 폴더)
  • 이미지를 하드 디스크의 "Images"폴더 또는 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 새로 만들기 -> 기존 항목을 선택하고 이미지)

이제 XAML에서 쉽게 이미지를 참조 할 수 있습니다 :

var source = (BitmapSource)Application.LoadComponent(
       new Uri("Images/MyImage.png", UriKind.Relative)); 

또한 외부 어셈블리의 이미지를 참조 할 수 있습니다 :

<Image Source="Images/MyImage.png" /> 

또는 코드에서

<Image Source="ReferencedAssembly;v1.0.0.1;component/Images/MyImage.png" /> 

코드로 다음 중 어느 것입니까 :

var source = (BitmapSource)Application.LoadComponent(
       new Uri("ReferencedAssembly;v1.0.0.1;component/Images/MyImage.png", 
       UriKind.Relative)); 
+0

완벽! 두 가지 질문 - (1) 빌드 액션을 '리소스'보다 '컨텐트'가되도록하는 실질적인 이점은 무엇입니까? (2) 참조 된 어셈블리에서 코드를 가져 오려면 'Application.LoadComponent ("ReferencedAssembly; v1.0.0.1; component/Images/MyImage.png")를 BitmapSource로 사용 하시겠습니까?' 그 구문 (미안, 세 가지 질문)을 얻을 수있는 도우미 코드를 알고 있습니까? 감사! – Berryl

+0

Application.LoadComponent가 Uri (문자열 아님)를 사용하는 것처럼 보입니다. – Berryl

+0

감사합니다. 어떻게 든 컴파일러가 내 방식의 오류를 지적 할 때까지는 항상 "새로운 Uri (..., UriKind.Relative)"를 잊어 버립니다. 나는 답을 바로 잡았다. –