AppWindow.SetIcon Metodo

Definizione

Overload

Nome Descrizione
SetIcon(IconId)

Imposta l'icona per la finestra utilizzando l'ID icona specificato.

SetIcon(String)

Imposta l'icona per la finestra utilizzando il percorso dell'icona specificato.

SetIcon(IconId)

Imposta l'icona per la finestra utilizzando l'ID icona specificato.

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)

Parametri

iconId
IconId

ID dell'icona.

Attributi

Esempio

Questi esempi presuppongono che sia presente un file icona denominato MyAppIcon.ico nella Assets cartella del progetto con l'azione di compilazione impostata su Contenuto.

Questo codice viene inserito nel App.xaml.cs file, ma l'icona può essere impostata anche nel file per la classe Window (MainWindow.xaml.cs per impostazione predefinita).

Questo esempio mostra come usare Platform Invoke (P/Invoke) per ottenere un handle su un'icona usando la funzione LoadImage Win32. È quindi possibile ottenere IconId e usarlo nella chiamata a SetIcon.

DLLImport viene usato per accedere alla LoadImage funzione in 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,
}

In questo esempio viene eseguita la stessa operazione dell'esempio precedente. Tuttavia, anziché usare DLLImport, usa il pacchetto NuGet CsWin32 per accedere alla LoadImage funzione.

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

Commenti

Se si dispone già di un handle per un'icona (HICON) da una delle funzioni Icon come CreateIcon o LoadImage, è possibile usare l'API di interoperabilità GetIconIdFromIcon per ottenere un IconId. È quindi possibile passare al metodo per impostare l'icona IconIdSetIcon(IconId) della finestra.

Importante

Quando si include il file .ico con gli asset delle app, è necessario impostare l'azione di compilazione su Contenuto nel riquadro delle proprietà Visual Studio.

Visual Studio proprietà U per il file icona che mostra l'azione di compilazione impostata sul contenuto.

Vedi anche

Si applica a

SetIcon(String)

Imposta l'icona per la finestra utilizzando il percorso dell'icona specificato.

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)

Parametri

iconPath
String

Platform::String

winrt::hstring

Percorso dell'icona.

Attributi

Commenti

Il SetIcon(String) metodo funziona solo con i file .ico.

In genere si chiama SetIcon da App.xaml.cs o da MainWindow.xaml.cs.

Importante

Quando si include il file .ico con gli asset delle app, è necessario impostare l'azione di compilazione su Contenuto nel riquadro delle proprietà Visual Studio.

Visual Studio proprietà U per il file icona che mostra l'azione di compilazione impostata sul contenuto.

La stringa passata a questo metodo è il percorso completo del file .ico. Esistono diversi modi per ottenere il percorso di un file icona incluso nel pacchetto dell'app.

In questo caso, l'icona è impostata in 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);
    }
}

I metodi seguenti ottengono il percorso del pacchetto dell'app. È quindi necessario combinare tale percorso con il percorso locale del file icona per creare il percorso completo.

  • Per .NET app, è possibile usare la proprietà AppContext.BaseDirectory.

    string path = AppContext.BaseDirectory;
    
  • Se l'app avrà come destinazione solo Windows 10, versione 2004 (10.0.19041.0) o successiva, è possibile usare la proprietà Package.InstalledPath.

    string path = Package.Current.InstalledPath;
    
  • Se l'app è destinata a versioni di Windows precedenti a Windows 10, versione 2004 (10.0.19041.0), puoi usare Package.InstalledLocation per ottenere la cartella, quindi usa la proprietà Path della cartella.

    string path = Package.Current.InstalledLocation.Path;
    

Dopo aver ottenuto il percorso del pacchetto dell'app, combinarlo con il percorso del file icona. In questo esempio viene usato il metodo Path.Combine per creare il percorso completo del file icona.

In questo caso, l'icona è impostata in 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"));
}

Vedi anche

Si applica a