AppWindow.SetIcon Methode

Definition

Überlädt

Name Beschreibung
SetIcon(IconId)

Legt das Symbol für das Fenster mithilfe der angegebenen Symbol-ID fest.

SetIcon(String)

Legt das Symbol für das Fenster mithilfe des angegebenen Symbolpfads fest.

SetIcon(IconId)

Legt das Symbol für das Fenster mithilfe der angegebenen Symbol-ID fest.

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)

Parameter

iconId
IconId

Die ID des Symbols.

Attribute

Beispiele

In diesen Beispielen wird davon ausgegangen, dass Sie über eine Symboldatei im MyAppIcon.icoAssets Ordner Ihres Projekts verfügen, deren Buildaktion auf "Inhalt" festgelegt ist.

Dieser Code wird in der App.xaml.cs Datei platziert, aber das Symbol kann auch in der Datei für die Window-Klasse festgelegt werden (MainWindow.xaml.cs standardmäßig).

In diesem Beispiel wird gezeigt, wie Sie mithilfe der Win32 LoadImage-Funktion ein Handle zu einem Symbol verwenden. Anschließend können Sie die IconId abrufen und im Aufruf SetIconverwenden.

DLLImport wird verwendet, um auf die LoadImage Funktion in user32.dllzuzugreifen.

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 diesem Beispiel wird dasselbe wie im vorherigen Beispiel ausgeführt. Anstelle der Verwendung DLLImportwird jedoch das CsWin32 NuGet-Paket verwendet, um auf die LoadImage Funktion zuzugreifen.

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

Hinweise

Wenn Sie bereits über ein Handle zu einem Symbol (HICON) aus einer der Symbolfunktionen wie CreateIcon oder LoadImage verfügen, können Sie die Interop-API "GetIconIdFromIcon " verwenden, um eine IconId abzurufen. Anschließend können Sie die IconIdSetIcon(IconId) Methode übergeben, um das Fenstersymbol festzulegen.

Important

Wenn Sie die .ico Datei in Ihre Apps-Ressourcen einschließen, müssen Sie die Buildaktion auf Inhalt im Eigenschaftenbereich Visual Studio festlegen.

Visual Studio Eigenschaften U I für die Symboldatei mit Buildaktionssatz auf Inhalt.

Weitere Informationen

Gilt für:

SetIcon(String)

Legt das Symbol für das Fenster mithilfe des angegebenen Symbolpfads fest.

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)

Parameter

iconPath
String

Platform::String

winrt::hstring

Der Pfad des Symbols.

Attribute

Hinweise

Die SetIcon(String) Methode funktioniert nur mit .ico Dateien.

Sie rufen SetIcon in der Regel entweder von App.xaml.cs oder von MainWindow.xaml.cs.

Important

Wenn Sie die .ico Datei in Ihre Apps-Ressourcen einschließen, müssen Sie die Buildaktion auf Inhalt im Eigenschaftenbereich Visual Studio festlegen.

Visual Studio Eigenschaften U I für die Symboldatei mit Buildaktionssatz auf Inhalt.

Die Zeichenfolge, die Sie an diese Methode übergeben, ist der vollqualifizierte Pfad zur ICO-Datei. Es gibt mehrere Möglichkeiten, den Pfad zu einer Symboldatei abzurufen, die in Ihrem App-Paket enthalten ist.

Hier ist das Symbol festgelegt 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);
    }
}

Die folgenden Methoden rufen den Pfad zum App-Paket ab. Anschließend müssen Sie diesen Pfad mit dem lokalen Pfad zur Symboldatei kombinieren, um den vollqualifizierten Pfad zu erstellen.

  • Für .NET Apps können Sie die AppContext.BaseDirectory-Eigenschaft verwenden.

    string path = AppContext.BaseDirectory;
    
  • Wenn Ihre App nur auf Windows 10, Version 2004 (10.0.19041.0) oder höher ausgerichtet ist, können Sie die Package.InstalledPath-Eigenschaft verwenden.

    string path = Package.Current.InstalledPath;
    
  • Wenn Ihre App auf Versionen von Windows vor Windows 10, Version 2004 (10.0.19041.0), ausgerichtet ist, können Sie Package.InstalledLocation verwenden, um den Ordner abzurufen, und dann die Path-Eigenschaft des Ordners verwenden.

    string path = Package.Current.InstalledLocation.Path;
    

Nachdem Sie über den Pfad zum App-Paket verfügen, kombinieren Sie es mit dem Pfad zur Symboldatei. In diesem Beispiel wird die Path.Combine-Methode verwendet, um den vollqualifizierten Pfad zur Symboldatei zu erstellen.

Hier ist das Symbol festgelegt 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"));
}

Weitere Informationen

Gilt für: