AppWindow.SetIcon Método

Definición

Sobrecargas

Nombre Description
SetIcon(IconId)

Establece el icono de la ventana con el identificador de icono especificado.

SetIcon(String)

Establece el icono de la ventana mediante la ruta de acceso del icono especificada.

SetIcon(IconId)

Establece el icono de la ventana con el identificador de icono especificado.

public:
 virtual void SetIcon(IconId iconId) = SetIcon;
/// [Windows.Foundation.Metadata.Overload("SetIconWithIconId")]
void SetIcon(IconId const& iconId);
[Windows.Foundation.Metadata.Overload("SetIconWithIconId")]
public void SetIcon(IconId iconId);
function setIcon(iconId)
Public Sub SetIcon (iconId As IconId)

Parámetros

iconId
IconId

Identificador del icono.

Atributos

Ejemplos

En estos ejemplos se supone que tiene un archivo de icono denominado MyAppIcon.ico en la Assets carpeta del proyecto con su acción de compilación establecida en Contenido.

Este código se coloca en el App.xaml.cs archivo, pero el icono también se puede establecer en el archivo de la clase Window (MainWindow.xaml.cs de forma predeterminada).

En este ejemplo se muestra cómo usar La invocación de plataforma (P/Invoke) obtiene un identificador de un icono mediante la función LoadImage de Win32. A continuación, puede obtener el IconId y usarlo en la llamada a SetIcon.

DLLImport se usa para acceder a la LoadImage función en user32.dll.

using Microsoft.UI;
using System;
using System.Runtime.InteropServices;

// ...

protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
{
    m_window = new MainWindow();
    LoadIconById("Assets/MyAppIcon.ico");
    m_window.Activate();
}

private void LoadIconById(string iconName)
{
    nint hwnd = WinRT.Interop.WindowNative.GetWindowHandle(m_window);
    IntPtr hIcon = LoadImage(
        IntPtr.Zero, iconName, ImageType.IMAGE_ICON, 16, 16, LoadImageFlags.LR_LOADFROMFILE);
    IconId iconID = Microsoft.UI.Win32Interop.GetIconIdFromIcon(hIcon);

    // SetIcon
    m_window?.AppWindow.SetIcon(iconID);
}

[DllImport("user32.dll", SetLastError = true)]
public static extern unsafe IntPtr LoadImage(
    IntPtr hInst,
    string name,
    ImageType type,
    int cx,
    int cy,
    LoadImageFlags fuLoad);

public enum ImageType : uint
{
    IMAGE_BITMAP = 0,
    IMAGE_ICON = 1,
    IMAGE_CURSOR = 2,
}

[Flags]
public enum LoadImageFlags : uint
{
    LR_CREATEDIBSECTION = 0x00002000,
    LR_DEFAULTCOLOR = 0x0,
    LR_DEFAULTSIZE = 0x00000040,
    LR_LOADFROMFILE = 0x00000010,
    LR_LOADMAP3DCOLORS = 0x00001000,
    LR_LOADTRANSPARENT = 0x00000020,
    LR_MONOCHROME = 0x00000001,
    LR_SHARED = 0x00008000,
    LR_VGACOLOR = 0x00000080,
}

En este ejemplo se hace lo mismo que en el ejemplo anterior. Sin embargo, en lugar de usar DLLImport, usa el paquete NuGet CsWin32 para acceder a la LoadImage función.

using Microsoft.UI;
using Microsoft.Win32.SafeHandles;
using System;
using System.ComponentModel;
using System.Runtime.InteropServices;
using Windows.Win32.UI.WindowsAndMessaging;

// ...

protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
{
    m_window = new MainWindow();
    LoadIconById("Assets/MyAppIcon.ico");
    m_window.Activate();
}

private void LoadIconById(string iconName)
{
    nint hwnd = WinRT.Interop.WindowNative.GetWindowHandle(m_window);
    SafeFileHandle hIcon_handle = Windows.Win32.PInvoke.LoadImage(
        null, iconName, GDI_IMAGE_TYPE.IMAGE_ICON, 32, 32, IMAGE_FLAGS.LR_LOADFROMFILE);

    if (hIcon_handle.IsInvalid || hIcon_handle.IsClosed)
    {
        Win32Exception ex = new Win32Exception(Marshal.GetLastWin32Error());
        throw ex;
    }
    bool success = false;
    hIcon_handle.DangerousAddRef(ref success);
    IconId iconID = Win32Interop.GetIconIdFromIcon(hIcon_handle.DangerousGetHandle());

    // SetIcon
    m_window?.AppWindow.SetIcon(iconID);
}

Comentarios

Si ya tiene un identificador para un icono (HICON) de una de las funciones Icon como CreateIcon o LoadImage, puede usar la API de interoperabilidad GetIconIdFromIcon para obtener un IconId. A continuación, puede pasar al IconId método para establecer el SetIcon(IconId) icono de la ventana.

Importante

Al incluir el archivo .ico con los recursos de las aplicaciones, debe establecer la acción de compilación en Contenido en el panel de propiedades de Visual Studio.

Visual Studio propiedades U del archivo de icono que muestra la acción de compilación establecida en contenido.

Consulte también

Se aplica a

SetIcon(String)

Establece el icono de la ventana mediante la ruta de acceso del icono especificada.

public:
 virtual void SetIcon(Platform::String ^ iconPath) = SetIcon;
/// [Windows.Foundation.Metadata.DefaultOverload]
/// [Windows.Foundation.Metadata.Overload("SetIcon")]
void SetIcon(winrt::hstring const& iconPath);
[Windows.Foundation.Metadata.DefaultOverload]
[Windows.Foundation.Metadata.Overload("SetIcon")]
public void SetIcon(string iconPath);
function setIcon(iconPath)
Public Sub SetIcon (iconPath As String)

Parámetros

iconPath
String

Platform::String

winrt::hstring

Ruta de acceso del icono.

Atributos

Comentarios

El SetIcon(String) método solo funciona con archivos .ico.

Normalmente, se llama a SetIcon desde App.xaml.cs o desde MainWindow.xaml.cs.

Importante

Al incluir el archivo .ico con los recursos de las aplicaciones, debe establecer la acción de compilación en Contenido en el panel de propiedades de Visual Studio.

Visual Studio propiedades U del archivo de icono que muestra la acción de compilación establecida en contenido.

La cadena que se pasa a este método es la ruta de acceso completa al archivo .ico. Hay varias maneras de obtener la ruta de acceso a un archivo de icono que se incluye en el paquete de la aplicación.

Aquí, el icono se establece en App.xaml.cs.

protected async override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
{
    m_window = new MainWindow();
    await SetIconAsync();
    m_window.Activate();
}

private async Task SetIconAsync()
{
    Uri uri = new Uri("ms-appx:///Assets/MyAppIcon.ico");
    StorageFile? storageFile = null;
    try
    {
        storageFile = await StorageFile.GetFileFromApplicationUriAsync(uri);
    }
    catch (Exception ex)
    {
        // Use default icon.
    }

    if (storageFile is not null)
    {
        m_window?.AppWindow.SetIcon(storageFile.Path);
    }
}

Los métodos siguientes obtienen la ruta de acceso al paquete de la aplicación. A continuación, debe combinar esa ruta de acceso con la ruta de acceso local al archivo de icono para crear la ruta de acceso completa.

  • Para .NET aplicaciones, puede usar la propiedad AppContext.BaseDirectory.

    string path = AppContext.BaseDirectory;
    
  • Si la aplicación solo tiene como destino Windows 10, versión 2004 (10.0.19041.0) o posterior, puedes usar la propiedad Package.InstalledPath.

    string path = Package.Current.InstalledPath;
    
  • Si la aplicación tiene como destino las versiones de Windows anteriores a Windows 10, versión 2004 (10.0.19041.0), puedes usar Package.InstalledLocation para obtener la carpeta y, a continuación, usar la propiedad Path de la carpeta.

    string path = Package.Current.InstalledLocation.Path;
    

Después de tener la ruta de acceso al paquete de la aplicación, combítela con la ruta de acceso al archivo de icono. En este ejemplo, usamos el método Path.Combine para crear la ruta de acceso completa al archivo de icono.

Aquí, el icono se establece en MainWindow.xaml.cs.

public MainWindow()
{
    this.InitializeComponent();

    //string path = Package.Current.InstalledLocation.Path;
    // OR
    //string path = Package.Current.InstalledPath;
    // OR
    string path = AppContext.BaseDirectory;
    string iconFileName = "Assets/MyAppIcon.ico";
    string iconPath = Path.Combine(path, iconFileName);
    AppWindow.SetIcon(iconPath);

    // This code can also be condensed like this:
    // AppWindow.SetIcon(Path.Combine(AppContext.BaseDirectory, "Assets\\MyAppIcon.ico"));
}

Consulte también

Se aplica a