AppWindow.SetIcon Método

Definição

Sobrecargas

Nome Description
SetIcon(IconId)

Define o ícone da janela usando a ID de ícone especificada.

SetIcon(String)

Define o ícone da janela usando o caminho de ícone especificado.

SetIcon(IconId)

Define o ícone da janela usando a ID de ícone especificada.

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

A ID do ícone.

Atributos

Exemplos

Esses exemplos pressupõem que você tenha um arquivo de ícone nomeado MyAppIcon.ico na Assets pasta do projeto com sua Ação de Build definida como Conteúdo.

Esse código é colocado no App.xaml.cs arquivo, mas o ícone também pode ser definido no arquivo para a classe Window (MainWindow.xaml.cs por padrão).

Este exemplo mostra como usar a Invocação de Plataforma (P/Invoke) para obter um identificador para um ícone usando a função Win32 LoadImage . Em seguida, você pode obter a IconId e usá-la na chamada para SetIcon.

DLLImport é usado para acessar a LoadImage função em 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,
}

Este exemplo faz a mesma coisa que o exemplo anterior. No entanto, em vez de usar DLLImport, ele usa o pacote NuGet CsWin32 para acessar a LoadImage função.

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);
}

Comentários

Se você já tiver um identificador para um ícone (HICON) de uma das funções de ícone , como CreateIcon ou LoadImage, poderá usar a API de interoperabilidade GetIconIdFromIcon para obter uma IconId. Em seguida, você pode passar o IconId método para definir o SetIcon(IconId) ícone de janela.

Importante

Ao incluir o arquivo .ico com seus ativos de aplicativos, você precisará definir a Ação de Build como Conteúdo no painel de propriedades Visual Studio.

Visual Studio propriedades U I para o arquivo de ícone mostrando a ação de build definida como conteúdo.

Confira também

Aplica-se a

SetIcon(String)

Define o ícone da janela usando o caminho de ícone especificado.

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

O caminho do ícone.

Atributos

Comentários

O SetIcon(String) método funciona apenas com arquivos .ico.

Normalmente, você chama SetIcon de App.xaml.cs ou de MainWindow.xaml.cs.

Importante

Ao incluir o arquivo .ico com seus ativos de aplicativos, você precisará definir a Ação de Build como Conteúdo no painel de propriedades Visual Studio.

Visual Studio propriedades U I para o arquivo de ícone mostrando a ação de build definida como conteúdo.

A cadeia de caracteres que você passa para esse método é o caminho totalmente qualificado para o arquivo .ico. Há várias maneiras de obter o caminho para um arquivo de ícone incluído no pacote do aplicativo.

Aqui, o ícone é definido em 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);
    }
}

Os métodos a seguir obtêm o caminho para o pacote do aplicativo. Em seguida, você precisa combinar esse caminho com o caminho local para o arquivo de ícone para criar o caminho totalmente qualificado.

  • Para aplicativos .NET, você pode usar a propriedade AppContext.BaseDirectory.

    string path = AppContext.BaseDirectory;
    
  • Se o aplicativo destinar-se apenas a Windows 10, versão 2004 (10.0.19041.0) ou posterior, você poderá usar a propriedade Package.InstalledPath.

    string path = Package.Current.InstalledPath;
    
  • Se seu aplicativo tiver como destino versões de Windows anteriores a Windows 10, versão 2004 (10.0.19041.0), você poderá usar Package.InstalledLocation para obter a pasta e, em seguida, usar a propriedade Path da pasta.

    string path = Package.Current.InstalledLocation.Path;
    

Depois de ter o caminho para o pacote do aplicativo, combine-o com o caminho para o arquivo de ícone. Neste exemplo, usamos o método Path.Combine para criar o caminho totalmente qualificado para o arquivo de ícone.

Aqui, o ícone é definido em 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"));
}

Confira também

Aplica-se a