将WPF BitmapSource转换为窗口的Icon

时间:2010-03-22 08:26:13

标签: wpf window icons bitmapsource bitmapframe

我有一个16x16 .png文件,我已将其作为ImageSource(BitmapSource)加载,当我在tabcontrol标题中的Image上使用它时它工作正常。

当用户拖动文档选项卡时,我现在想在浮动窗口(从WPF Window类继承)中使用相同的图像。 (这是AvalonDock,我已经调整它以允许标签标题中的图像)

在网上进行了多次搜索后,我了解Window.Icon需要一个BitmapFrame,但所有示例代码似乎都假设.ico文件可用,而不是我的情况。

我尝试过以下代码(加上包括克隆,冻结等变体):

var image = (Image) content.Icon;
var bitmapSource = (BitmapSource) image.Source;

Icon = BitmapFrame.Create(bitmapSource);

但是当调用Show()方法时,会抛出异常:“抛出了类型'System.ExecutionEngineException'的异常。”

如何动态创建兼容的位图以允许窗口显示图标?

2 个答案:

答案 0 :(得分:0)

您是否需要能够动态加载图像,或者您是否一直使用相同的图标?

如果图像未在运行时确定,那么您可以随时手动转换图像以使用Microangelo或类似内容生成.ico文件。显然,如果您确实需要动态创建图标,这无济于事。

答案 1 :(得分:0)

原来,BitmapFrame.Create是正确的。只需要传递一个Uri而不是现有的BitmapSource。