AppWindow.SetIcon Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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.
Confira também
- Criar um aplicativo .NET em C# com a interoperabilidade WinUI 3 e Win32
- CsWin32 no GitHub
- Introdução ao CsWin32
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.
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.
- Use o
ms-appxesquema de URI para fazer referência ao arquivo de ícone e, em seguida, chame StorageFile.GetFileFromApplicationUriAsync. Passe o caminho do arquivo paraSetIcon.
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"));
}