添加图片F#

时间:2011-03-09 15:10:51

标签: silverlight f#

我有一个堆栈面板,我想动态添加一些图标。

如果我将一个TextBlock添加到堆栈面板,它可以完美地运行:

// 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

现在我做的时候:

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)

我可以看到文本之间有一个空白区域,好像那里有一个空图像。 所以我的猜测是我解决图像路径的方式有问题 - 但我不确定原因。

思想?

谢谢!

2 个答案:

答案 0 :(得分:5)

如果你的gif的Build Action是Resource,那么解决它的正确方法是/SilverlightApplication1;component/path/to/file.gif。这里SilverlightApplication1是您的silverlight应用程序的名称

如果构建操作是内容,那么它的正确地址为/path/to/file.gif,在创建BitmapImage时始终带有前导斜杠。

查看Silverlight 2: Demystifying URI references for app resources 了解详情。

为了更轻松地调试图像加载问题,请挂钩BitmapImage.ImageFailed事件,看看会出现什么样的错误。

最后一点,AFAIK Silverlight不支持GIF格式。您可以改用PNG。

答案 1 :(得分:0)

如果你的是WPF App,你可以尝试使用以下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)

希望这有帮助。