AppWindow.SetIcon Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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.
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.
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.
- Usare lo
ms-appxschema URI per fare riferimento al file icona, quindi chiamare StorageFile.GetFileFromApplicationUriAsync. Passare il percorso del file aSetIcon.
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"));
}