XAML에서 이미지 리소스를 참조하는 방법은 무엇입니까?


81

Image컨트롤을 창에 놓고 "Resources.resx"라는 프로젝트 리소스 파일에 저장된 이미지를 표시하고 싶습니다. 리소스 파일의 이미지 이름은 '검색'입니다.

누군가 내가 이것을 어떻게 할 수 있는지 보여줄 수 있습니까?

답변:


117

이미지가 리소스 폴더에 있고 빌드 작업이 리소스로 설정된 경우. 다음과 같이 XAML에서 이미지를 참조 할 수 있습니다.

"pack://application:,,,/Resources/Search.png"

Resources 폴더 아래에 폴더 구조가 없으며 응용 프로그램이라고 가정합니다. 예를 들어 다음을 사용합니다.

ImageSource="pack://application:,,,/Resources/RibbonImages/CloseButton.png"

Resources 폴더 아래에 RibbonImages라는 폴더가있을 때.


'pack'네임 스페이스는 무엇을 나타 냅니까?
Hosea146 2011

2
여기에 팩 uri에 대한 정보가 있습니다 : msdn.microsoft.com/en-us/library/…
Viv

2
내 응용 프로그램에 이미지를 추가 한 지 오래되었습니다. 여기에 지쳤을 수도 있지만 WPF 디자이너에서 이미지를 표시하기 전에 응용 프로그램을 빌드해야 할 수도 있습니다.
Viv

3
지금은 테스트 할 수 없지만 위의 MSDN 링크에서 참조 된 어셈블리에 대해 "/ReferencedAssembly;component/Subfolder/ResourceFile.xaml"을 사용합니다. 여기서 "ReferencedAssembly"는 어셈블리 이름입니다. "/MyProgram.Namespace;component/Resources/imagename.png"내가 좋아하는 코드를 작성했습니다
비비안

1
@wonea 나를 위해이 작품은 "팩 : // 응용 프로그램 : ,,, / YourAppName, 구성 요소 / 자원 / FileDialog.png"빌드 작업 "자원"와
안토니오

30

프로젝트의 아이콘 폴더에 이미지가 있고 빌드 작업이 "리소스"인 경우 다음과 같이 참조 할 수 있습니다.

<Image Source="/Icons/play_small.png" />

이것이 가장 간단한 방법입니다. 이것이 리소스 관점에서 순전히 수행 할 수있는 유일한 방법이며 프로젝트 파일은 없습니다.

var resourceManager = new ResourceManager(typeof (Resources));
var bitmap = resourceManager.GetObject("Search") as System.Drawing.Bitmap;

var memoryStream = new MemoryStream();
bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Bmp);
memoryStream.Position = 0;

var bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = memoryStream;
bitmapImage.EndInit();

this.image1.Source = bitmapImage;

17
여기에는 약간의 변형이 있습니다. <Image Source="/Icons/play_small.png" />시작 부분에 슬래시가 있습니다. 즉, 루트 폴더를 살펴 봅니다. xaml 파일이 루트에 없으면 슬래시없이 xaml 파일과 동일한 디렉토리에서 검색을 시작하므로 필요합니다.
Greg Gum

8

리소스 파일 사용의 이점 중 하나는 이름으로 리소스에 액세스하는 것이므로 리소스가 최신 상태로 유지되는 한 올바른 이미지가 표시되는 한 이미지가 변경 될 수 있으며 이미지 이름이 변경 될 수 있습니다.

다음은이를 수행하기위한보다 깔끔한 접근 방식입니다. Resources.resx가 'UI.Images'네임 스페이스에 있다고 가정하고 다음과 같이 xaml에 네임 스페이스 참조를 추가합니다.

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:UI="clr-namespace:UI.Images" 

다음과 같이 이미지 소스를 설정하십시오.

<Image Source={Binding {x:Static UI:Resources.Search}} /> 여기서 '검색'은 리소스의 이름입니다.


리소스가 public으로 설정되어 있는지 확인하십시오. stackoverflow.com/a/19667704/155892
Mark Sowul

3
자원이 System.Drawing.Bitmap을 사용하고 있기 때문에 사실이, 이미지에 대한 작동하지 않는 것
마크 Sowul에게

4
  1. 프로젝트에 폴더를 추가하고 "기존 항목"을 통해 여기에 이미지를 추가합니다.
  2. 다음과 유사한 XAML : <Image Source="MyRessourceDir\images\addButton.png"/>
  3. F6 (빌드)

<ImageBrush ImageSource = "Assets \ Placeholder.png"/> 일했습니다. 감사합니다
Varus Septimus

1a. 파일의 속성 탭에서 BuildAction을 "Resource"로 설정합니다
Richard II
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.