[WPF – NET 7.0] – Asignar un icono mediante código a una ventana

Descripción general:

Este pequeño apunte muestra como asignar un icono a una ventana WPF mediante código


↑↑↑

Opción Primera Mediante código XAML


<Window
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="SDKSample.MainWindow"
    Icon="WPFIcon1.ico">
</Window>


↑↑↑

Opción segunda, Mediante código

Tenemos dos opciones,
  1. Que el icono sea un fichero que guardamos en la misma carpeta que el ejecutable
  2. Que el icono este incluido como un recurso

El icono es un fichero que guardamos en la misma carpeta que el ejecutable

Ejemplo sencillo de msdn


Dim iconUri As New Uri("pack://application:,,,/WPFIcon2.ico", UriKind.RelativeOrAbsolute) 
Me.Icon = BitmapFrame.Create(iconUri) 

Ejemplo un poco mas complicado


 '------------------------------------- 
' El nombre del icono esta en la misma carpeta que el ensamblado ejecutable 
 'https://learn.microsoft.com/es-es/dotnet/api/system.windows.window.icon?view = windowsdesktop-7.0 
'------------------------------------- 
 'Paso A) Obtener el nombre del ensamblado' esto obtiene la DLL o el EXE seg�n 
 Dim LocalNombreCompletoDelEnsamblado As String = System.Reflection.Assembly.GetExecutingAssembly().Location 
 ' Solo necesito la ruta 
 Dim LocalRutaDelEnsamblado As String = System.IO.Path.GetDirectoryName(LocalNombreCompletoDelEnsamblado) 

'------------------------------------- 
 'Paso B) Nombre completo del ejecutable (El fichero exe) 
 ' (ruta + nombre + extensión) 
Dim NombreCompletoDelIcono As String = System.IO.Path.Combine(LocalRutaDelEnsamblado, "Stopwatch.ico") 

 '------------------------------------- 
'Paso c) Con el nombre de fichero generar un objeto URI 
' y crear el icono y asignarlo a la propiedad 
If System.IO.File.Exists(NombreCompletoDelIcono) = True Then 
          Dim iconUri As New Uri(NombreCompletoDelIcono) 
           Me.Icon = BitmapFrame.Create(iconUri) 
End If 

El icono esta incluido como un recurso


 '------------------------------------- 
 ' El nombre del icono esta en recursos 
 ' https://stackoverflow.com/questions/43179090/change-taskbar-icon-at-runtime-on-deployed-app/43179733#43179733 
 ' 
 Dim ms_icon As BitmapSource = 
           System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon( 
                       My.Resources.Stopwatch.Handle, 
                       Int32Rect.Empty, 
                       BitmapSizeOptions.FromEmptyOptions()) 
 Me.Icon = ms_icon