在运行时C#.NET上没有在WPF上显示图标?

时间:2014-02-07 15:00:03

标签: c# .net wpf

我有一个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;
}

所以,我的问题是因为它与这篇文章的标题有关,我是否在运行时错误地加载了我的图标?如果是这样,建议如何正确地这样做。我还应该检查一下我的问题是什么?

1 个答案:

答案 0 :(得分:1)

我不确定你有WPF应用程序,在资源中你有ico的图标文件类型吗?

如果是的话。问题可能在这里:

您的ico变量的类型为System.Drawing.IconWindow.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的示例应用。