2014-02-07 5 views
0

У меня есть форма WPF, где я пытаюсь добавить значок. В меню свойств я выбрал свой значок из папки ресурсов. В представлении дизайна значок появляется там, где он должен. Когда я иду запускать приложение, он показывает представление по умолчанию. Я проверил несколько источников. Наиболее распространенным ответом является установка его на основную форму, которую я также сделал. Ниже приведен код моего кода.Значок не отображается в WPF во время выполнения C# .NET?

//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

Вы пробовали полную «перестройку» и очищали папки «bin» и «obj» вашего решения? –

+0

Вы запускаете его через Visual studio или из файла .exe в папке «Release»? Если вы запускаете его через VS, ваше приложение будет размещено в процессе vshost.exe, и оно отобразит этот значок, а не тот, который находится в вашем приложении. –

+0

@JensH, когда я вхожу в мой bin, значок есть для файла .exe. Однако, как только я открою документ, значок в левом верхнем углу по умолчанию будет соответствовать основному значку. Он имеет тот же значок, когда он сводит к минимуму. –

ответ

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.

Смежные вопросы