AppWindow.SetIcon Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ü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.
Weitere Informationen
- Erstellen einer C# .NET App mit WinUI 3- und Win32-Interop
- CsWin32 auf GitHub
- Erste Schritte mit CsWin32
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.
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.
- Verwenden Sie das
ms-appxURI-Schema, um auf Ihre Symboldatei zu verweisen, und rufen Sie dann StorageFile.GetFileFromApplicationUriAsync auf. Übergeben Sie den Pfad der Datei anSetIcon.
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"));
}