我有一个WPF表单,我试图添加一个图标。在属性菜单中,我从资源文件夹中选择了我的图标。在设计视图中,图标出现在应有的位置。当我去运行应用程序时,它显示默认视图。我检查了几个来源。最常见的反应是将它设置为我所做的主要形式。以下是我的代码。
//in private void InitializeComponent()
{
this.Load += new System.EventHandler(this.CallTrak_Load);
}
//in CallTrak.Load
private void CallTrak_Load(object sender, EventArgs e)
{
System.Drawing.Icon ico = Properties.Resources.favicon;
this.Icon = ico;
}
所以,我的问题是因为它与这篇文章的标题有关,我是否在运行时错误地加载了我的图标?如果是这样,建议如何正确地这样做。我还应该检查一下我的问题是什么?
答案 0 :(得分:1)
我不确定你有WPF应用程序,在资源中你有ico的图标文件类型吗?
如果是的话。问题可能在这里:
您的ico
变量的类型为System.Drawing.Icon
,Window.Icon
属性的类型为ImageSource
。
System.Drawing.Icon ico = Properties.Resources.favicon;
//can not assign Drawing.Icon to ImageSource
this.Icon = ico;
你应该得到例外:
Cannot implicitly convert type 'System.Drawing.Icon' to 'System.Windows.Media.ImageSource'
如果您想以自己的方式使用,则需要convert System.Drawin.Icon to ImageSource。
internal static class IconUtilities
{
[DllImport("gdi32.dll", SetLastError = true)]
private static extern bool DeleteObject(IntPtr hObject);
public static ImageSource ToImageSource(Icon icon)
{
Bitmap bitmap = icon.ToBitmap();
IntPtr hBitmap = bitmap.GetHbitmap();
ImageSource wpfBitmap = Imaging.CreateBitmapSourceFromHBitmap(
hBitmap,
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
if (!DeleteObject(hBitmap))
{
throw new Win32Exception();
}
return wpfBitmap;
}
}
private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
{
ImageSource imageSource = IconUtilities.ToImageSource(Properties.Resources.love);
this.Icon = imageSource;
//System.Drawing.Icon ico = Properties.Resources.love;
//this.Icon = ico;
}
或简单的方式:
例如,将图标添加到图像文件夹。将构建操作设置为内容并复制到输出目录副本(如果较新)。然后你可以使用:
this.Icon = new BitmapImage(new Uri("images/love.ico", UriKind.Relative));
您可以下载here的示例应用。