2011-03-09 5 views
3

일부 아이콘을 동적으로 추가하려는 스택 패널이 있습니다.이미지 추가 F #

// assuming stackPanel is my stack panel 
let text = new TextBlock() 
text.Text <- "Test" 
stackPanel.Children.add(text) 

하지만, 내 목표는 이미지를 추가하는 것입니다,하지만 이미지

let getImageSource(imagePath) = 
    let uri = new Uri(imagePath, UriKind.Relative) 
    new BitmapImage(uri); 

let icon = new Image() 
icon.Source <- getImageSource("images/fileIcon/icon.gif") 

stackPanel.Children.Add(icon) // this doesnt work 
를 해결하지 못하는 것 같다 :

내가 스택 패널에있는 TextBlock을 추가하면 완벽하게 작동

내가 할 지금 때

let icon = new Image() 
icon.Source <- getImageSource("images/fileIcon/icon.gif") 

stackPanel.Children.Add(icon) 

let text = new TextBlock() 
text.Text <- "Test" 
stackPanel.Children.add(text) 
빈 IMAG이있는 것처럼 나는 텍스트 사이의 빈 공간이, 거기에 볼 수 있습니다

거기에. 내 생각 엔 이미지 경로를 해결하는 방식에 문제가있는 것 같지만 그 이유는 확실하지 않습니다.

생각하십니까?

감사합니다.

답변

5

gif의 빌드 작업이 리소스 인 경우 주소를 지정하는 적절한 방법은 /SilverlightApplication1;component/path/to/file.gif입니다. SilverlightApplication1은 Silverlight 응용 프로그램의 이름입니다.

Build Action이 Content 인 경우 적절한 주소는 /path/to/file.gif이며, BitmapImage을 만들 때는 항상 슬래시를 사용합니다.

자세한 내용은 Silverlight 2: Demystifying URI references for app resources을 확인하십시오.

이미지로드 문제를 쉽게 디버깅하려면 BitmapImage.ImageFailed 이벤트로 연결하여 어떤 종류의 오류가 발생하는지 확인하십시오.

AFAIK Silverlight는 GIF 형식을 지원하지 않습니다. 대신 PNG를 사용할 수 있습니다.

+0

GIF에 대해 깨닫지 못했습니다 ... 문제는 GIF 때문이었습니다. –

0

WPF 앱인 경우 다음 Uri로 시도 할 수 있습니다.

let uri = Uri("pack://application:,,,/asm_name;component/images/fileIcon/icon.gif") 

asm_name는 실제 어셈블리 이름으로 대체해야합니다.

Silverlight 응용 프로그램에서 작업하는 경우이 같은 URI를 수정해야합니다. icon.gif의 빌드 동작이 Resource라고 가정합니다.

let uri = Uri("../images/fileIcon/icon.gif", UriKind.Relative) 

희망이 도움이됩니다.

+0

작동하지 않는 것 같습니다 : {System.UriFormatException : 잘못된 URI : 잘못된 포트가 지정되었습니다. –

+0

답을 수정했습니다. –

+0

내가 추가 한 두 번째 방법은 이미 가지고있는 것과 동일합니다 (getImageSource 함수 참조). 그리고 네, 상대 경로를 변경하려고했습니다. –