为什么我的应用程序图标不是透明的?

4
在XAML中,我尝试将窗口/应用程序图标绑定到文件系统中的图标。
在Window.xaml中:
Icon="{Binding ApplicationIcon}"

在 AppViewModel.cs 中。
public ImageSource ApplicationIcon
{
  get
  {
    return new BitmapImage(new Uri(pathReadFromConfigFile));
  }
}

当我这样做时,图标会显示出来,但不是透明的。但是,如果我在项目中设置图标(而不使用绑定),则图标将添加到项目中,并且在启动应用程序时它是透明的。为什么在这两种情况下,表现有所不同?


2
请原谅我,我并不是想偏离原问题,但这不是把MVVM推向了极致吗?除非您的图标会在运行时更改,因此决策需要在VM中完成,并通过属性公开,以使视图被动。否则,为什么要费心呢? - denis morozov
1
我理解你的意思,但我们正在尝试设计一个可配置的应用程序。我们有几个非常相似的应用程序,但它们的图标不同。我们的目标是使用不同的配置文件来运行一个可执行文件。 - bsh152s
1
是的,有道理。我之所以问这个问题,是因为我内心挣扎着要成为一个纯粹主义者还是一个做事情完成者。所以我只是想知道其他人的动力是什么。谢谢回复。 - denis morozov
这可能与图像加载方式和ImageSource的创建有关。如果您将ApplicationIcon绑定到具有奇怪背景颜色的Image.Source,您是否看到透明度?请向我们展示您代码的其余部分。 - Brannon
@Brannon,我添加了更多的代码。我猜这与返回BitmapImage有关。但是,我还能用什么方式创建图像? - bsh152s
@bsh152s:您的代码在我的系统上可以使用任何图标(无论大小从16x16到48x48,颜色深度从4位到32位)。我使用的是VS2010 Premium SP1(10.0.40219.1),目标为.NET 4.0。这可能是由于旧版本或非SP1版本的VS引起的吗? - Alan
1个回答

1
搞定了。问题出在创建BitMapImage上。现在改用BitmapFrame解决了。
public ImageSource ApplicationIcon
{
  get
  {
    return BitmapFrame.Create(new Uri(pathReadFromConfigFile));
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接