我有一个堆栈面板,我想动态添加一些图标。
如果我将一个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)
我可以看到文本之间有一个空白区域,好像那里有一个空图像。 所以我的猜测是我解决图像路径的方式有问题 - 但我不确定原因。
思想?
谢谢!
答案 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)
希望这有帮助。