應用程式週期
.NET 多平臺應用程式 UI (.NET MAUI) 應用程式通常有四個執行狀態:未執行、執行、停用和停止。 當應用程式從未執行狀態轉換為執行中狀態、執行狀態轉換為已停用狀態、已停用狀態至已停止狀態、已停止狀態至執行狀態、已停止狀態至執行中狀態時,.NET MAUI 會在 類別上 Window
引發跨平臺生命週期事件,並將停止狀態轉換為未執行狀態。
下圖顯示 .NET MAUI 應用程式生命週期的概觀:
在圖表中,灰色橢圓表示應用程式未載入記憶體。 淺藍色橢圓形表示應用程序位於記憶體中。 弧形上的文字表示 .NET MAUI 所引發的事件,這些事件會提供通知給執行中的應用程式。
應用程式的執行狀態取決於應用程式的歷程記錄。 例如,第一次安裝應用程式或啟動裝置時,可以將應用程式視為 未執行。 啟動應用程式時, Created
會引發和 Activated
事件,且應用程式正在 執行。 如果不同的應用程式視窗取得焦點,Deactivated
則會引發事件並停用應用程式。 如果使用者切換到不同的應用程式或返回裝置的主畫面,讓應用程式視窗不再顯示,Deactivated
就會引發和 Stopped
事件,並停止應用程式。 如果使用者返回應用程式, Resuming
就會引發 事件,且應用程式正在 執行。 或者,應用程式在執行時可能會由用戶終止。 在此情況下,應用程式會停用,然後停止、Destroying
引發事件,而且應用程式未執行。 同樣地,裝置可能會因為資源限制而停止時終止應用程式,而且 Destroying
引發事件且應用程式 未執行。
此外,.NET MAUI 可讓應用程式在引發平臺生命週期事件時收到通知。 如需詳細資訊,請參閱 平臺生命週期事件。
跨平臺生命週期事件
類別 Window
會定義下列跨平臺生命週期事件:
活動 | 描述 | 要採取的動作 |
---|---|---|
Created |
建立原生窗口之後,就會引發此事件。 此時,跨平台視窗會有原生窗口處理程式,但視窗可能還看不到。 | |
Activated |
當視窗已啟動且成為焦點視窗或將成為焦點視窗時,就會引發此事件。 | |
Deactivated |
當視窗不再是焦點視窗時,就會引發這個事件。 不過,視窗可能仍會顯示。 | |
Stopped |
當視窗不再顯示時,就會引發此事件。 不保證應用程式會從這個狀態繼續,因為應用程式可能會由操作系統終止。 | 中斷與任何長時間執行的進程中斷連線,或取消任何可能耗用裝置資源的擱置要求。 |
Resumed |
當應用程式在停止後繼續時,就會引發此事件。 此事件不會在第一次啟動您的應用程式時引發,而且只有在先前已引發事件時 Stopped ,才能引發。 |
訂閱任何必要的事件,並重新整理可見頁面上的任何內容。 |
Destroying |
當原生視窗被終結並解除分配時,就會引發此事件。 重新開啟應用程式時,可能會針對新的原生視窗使用相同的跨平台視窗。 | 拿掉您已附加至原生視窗的任何事件訂用帳戶。 |
這些跨平臺事件會對應至不同的平臺事件,下表顯示此對應:
活動 | Android | iOS | Windows |
---|---|---|---|
Created |
OnPostCreate |
FinishedLaunching |
Created |
Activated |
OnResume |
OnActivated |
Activated (CodeActivated 和 PointerActivated ) |
Deactivated |
OnPause |
OnResignActivation |
Activated (Deactivated ) |
Stopped |
OnStop |
DidEnterBackground |
VisibilityChanged |
Resumed |
OnRestart |
WillEnterForeground |
Resumed |
Destroying |
OnDestroy |
WillTerminate |
Closed |
此外,類別 Window
也會定義 Backgrounding
在關閉視窗或進入背景狀態時,在iOS和Mac Catalyst上引發的事件。 BackgroundingEventArgs
物件會伴隨此事件,而且任何string
狀態都應該保存至 對象的 屬性BackgroundingEventArgs
,OS 會保留該State
屬性,直到繼續窗口為止。 當窗口繼續時,自變數會提供 IActivationState
狀態給 CreateWindow
覆寫。
除了這些事件之外,類別 Window
也具有下列可覆寫的生命週期方法:
OnCreated
,這是在引發事件時叫用的Created
。OnActivated
,這是在引發事件時叫用的Activated
。OnDeactivated
,這是在引發事件時叫用的Deactivated
。OnStopped
,這是在引發事件時叫用的Stopped
。OnResumed
,這是在引發事件時叫用的Resumed
。OnDestroying
,這是在引發事件時叫用的Destroying
。OnBackgrounding
,這是在引發事件時叫用的Backgrounding
。
若要訂閱 Window
生命週期事件,請覆寫 CreateWindow
類別 App
中的 方法,以建立 Window
您可以訂閱事件的實例:
namespace MyMauiApp
{
public partial class App : Application
{
public App()
{
InitializeComponent();
MainPage = new MainPage();
}
protected override Window CreateWindow(IActivationState? activationState)
{
Window window = new Window(new AppShell());
window.Created += (s, e) =>
{
// Custom logic
};
return window;
}
}
}
namespace MyMauiApp
{
public partial class App : Application
{
public App()
{
InitializeComponent();
}
protected override Window CreateWindow(IActivationState activationState)
{
Window window = base.CreateWindow(activationState);
window.Created += (s, e) =>
{
// Custom logic
};
return window;
}
}
}
或者,若要取用生命週期覆寫,請建立衍生自 類別的 Window
類別
namespace MyMauiApp
{
public class MyWindow : Window
{
public MyWindow() : base()
{
}
public MyWindow(Page page) : base(page)
{
}
protected override void OnCreated()
{
// Register services
}
}
}
Window
接著,藉由覆寫 CreateWindow
類別App
中的方法來傳回 MyWindow
實例,即可取用衍生類別。
警告
InvalidOperationException
如果 已設定 屬性,App.MainPage
而且 CreateWindow
方法會使用接受自變數的覆寫建立 Window
物件,則會擲回 Page 。
平臺生命週期事件
.NET MAUI 會定義叫用的委派,以回應所引發的平臺生命週期事件。 您可以使用具名方法或匿名函式,為這些委派指定處理程式,這些函式會在叫用委派時執行。 此機制可讓應用程式在引發通用平臺生命週期事件時收到通知。
重要
方法 ConfigureLifecycleEvents
位於 命名空間中 Microsoft.Maui.LifecycleEvents
。
Android
下表列出為了回應所引發Android生命週期事件而叫用的 .NET MAUI 委派:
委派 | 引數 | 描述 | 註解 |
---|---|---|---|
OnActivityResult |
Android.App.Activity 、 、 int 、 Android.App.Result Android.Content.Intent? |
當您啟動的活動結束時叫用。 | |
OnApplicationConfigurationChanged |
Android.App.Application , Android.Content.Res.Configuration |
當您的元件執行時,裝置組態變更時叫用。 | |
OnApplicationCreate |
Android.App.Application |
在應用程式啟動時叫用,在已建立活動、服務或接收者物件(不包括內容提供者)之前。 | |
OnApplicationCreating |
Android.App.Application |
在建立活動、服務或接收者物件(不包括內容提供者)之前,叫用應用程式。 | |
OnApplicationLowMemory |
Android.App.Application |
當系統在記憶體不足時叫用,且主動執行的進程應該會修剪其記憶體使用量。 | |
OnApplicationTrimMemory |
Android.App.Application , Android.Content.TrimMemory |
當操作系統判斷進程從其進程修剪不需要的記憶體時,叫用它。 | |
OnBackPressed |
Android.App.Activity |
當活動偵測到按下後鍵時叫用。 | |
OnConfigurationChanged |
Android.App.Activity , Android.Content.Res.Configuration |
當您的活動執行時,裝置組態變更時叫用。 | |
OnCreate |
Android.App.Activity , Android.OS.Bundle? |
建立活動時引發。 | |
OnDestroy |
Android.App.Activity |
當活動完成時叫用,或因為系統正在暫時終結活動實例以節省空間。 | 一律呼叫超級類別的實作。 |
OnNewIntent |
Android.App.Activity , Android.Content.Intent? |
當活動在活動堆疊頂端重新啟動時叫用,而不是啟動活動的新實例時叫用。 | |
OnPause |
Android.App.Activity |
當活動進入背景時叫用,但尚未終止。 | 一律呼叫超級類別的實作。 |
OnPostCreate |
Android.App.Activity , Android.OS.Bundle? |
在呼叫 和 OnRestoreInstanceState 之後,於活動啟動完成時OnStart 叫用。 |
一律呼叫超級類別的實作。 這是應用程式通常不應該使用的僅限系統事件。 |
OnPostResume |
Android.App.Activity |
在呼叫之後,於活動繼續完成時 OnResume 叫用。 |
一律呼叫超級類別的實作。 這是應用程式通常不應該使用的僅限系統事件。 |
OnRequestPermissionsResult |
Android.App.Activity 、 、 int 、 string[] Android.Content.PM.Permission[] |
從要求許可權叫用為結果的回呼。 | |
OnRestart |
Android.App.Activity |
OnStop 在將目前活動重新顯示給用戶之後叫用 (使用者已巡覽回該活動)。 |
一律呼叫超級類別的實作。 |
OnRestoreInstanceState |
Android.App.Activity , Android.OS.Bundle |
從先前儲存的狀態重新初始化活動之後 OnStart 叫用。 |
|
OnResume |
Android.App.Activity |
在、 OnRestart 或 OnPause 之後OnRestoreInstanceState 叫用 ,表示活動為使用中,且已準備好接收輸入。 |
|
OnSaveInstanceState |
Android.App.Activity , Android.OS.Bundle |
叫用以從正在終止的活動擷取每個實例狀態,以便於或 OnRestoreInstanceState 中OnCreate 還原狀態。 |
|
OnStart |
Android.App.Activity |
在活動停止之後 OnCreate 或 OnRestart 之後叫用,但現在會顯示給使用者。 |
一律呼叫超級類別的實作。 |
OnStop |
Android.App.Activity |
當使用者不再看到活動時叫用。 | 一律呼叫超級類別的實作。 |
重要
每個委派都有對應的相同命名擴充方法,可以呼叫 來註冊委派的處理程式。
若要回應所叫用的Android生命週期委派,ConfigureLifecycleEvents
請在類別MauiProgram
的方法中呼叫物件CreateMauiapp
上的 MauiAppBuilder
方法。 然後,在 ILifecycleBuilder
物件上呼叫 AddAndroid
方法,並指定 Action
為必要委派註冊處理程式的 :
using Microsoft.Maui.LifecycleEvents;
namespace PlatformLifecycleDemo
{
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureLifecycleEvents(events =>
{
#if ANDROID
events.AddAndroid(android => android
.OnActivityResult((activity, requestCode, resultCode, data) => LogEvent(nameof(AndroidLifecycle.OnActivityResult), requestCode.ToString()))
.OnStart((activity) => LogEvent(nameof(AndroidLifecycle.OnStart)))
.OnCreate((activity, bundle) => LogEvent(nameof(AndroidLifecycle.OnCreate)))
.OnBackPressed((activity) => LogEvent(nameof(AndroidLifecycle.OnBackPressed)) && false)
.OnStop((activity) => LogEvent(nameof(AndroidLifecycle.OnStop))));
#endif
static bool LogEvent(string eventName, string type = null)
{
System.Diagnostics.Debug.WriteLine($"Lifecycle event: {eventName}{(type == null ? string.Empty : $" ({type})")}");
return true;
}
});
return builder.Build();
}
}
}
如需Android應用程式生命週期的詳細資訊,請參閱 瞭解 developer.android.com 的活動生命週期 。
iOS 和 Mac Catalyst
下表列出為了回應所引發 iOS 和 Mac Catalyst 生命週期事件的 .NET MAUI 委派:
委派 | 引數 | 描述 |
---|---|---|
ApplicationSignificantTimeChange |
UIKit.UIApplication |
發生重大時間變更時叫用,例如午夜、電信業者變更時間,或日光節約的開始或停止。 |
ContinueUserActivity |
UIKit.UIApplication 、 、 Foundation.NSUserActivity UIKit.UIApplicationRestorationHandler |
當應用程式收到與用戶活動相關聯的數據時叫用,例如使用 Handoff 從不同的裝置傳輸活動。 |
DidEnterBackground |
UIKit.UIApplication |
當應用程式進入背景時叫用。 |
FinishedLaunching |
UIKit.UIApplication , Foundation.NSDictionary |
啟動應用程式時叫用。 |
OnActivated |
UIKit.UIApplication |
在應用程式啟動時叫用,每次應用程式返回前景時叫用。 |
OnResignActivation |
UIKit.UIApplication |
當應用程式即將進入背景、暫停或使用者收到中斷時叫用,例如通話或簡訊。 |
OpenUrl |
UIKit.UIApplication , Foundation.NSDictionary |
當應用程式應該開啟指定的 URL 時叫用。 |
PerformActionForShortcutItem |
UIKit.UIApplication 、 、 UIKit.UIApplicationShortcutItem UIKit.UIOperationHandler |
起始主畫面快速動作時叫用。 |
PerformFetch |
UIKit.UIApplication , Action<UIBackgroundFetchResult> |
叫用來告訴應用程式,如果應用程式有要下載的數據,它可以開始擷取作業。 |
SceneContinueUserActivity |
UIKit.UIScene , Foundation.NSUserActivity |
叫用以處理指定的 Handoff 相關活動。 |
SceneDidDisconnect |
UIKit.UIScene |
從應用程式移除場景時叫用。 |
SceneDidEnterBackground |
UIKit.UIScene |
當場景在背景執行且不在螢幕上時叫用。 |
SceneDidFailToContinueUserActivity |
UIKit.UIScene 、 、 string Foundation.NSError |
叫用以通知用戶無法完成活動。 |
SceneDidUpdateUserActivity |
UIKit.UIScene , Foundation.NSUserActivity |
在更新指定的活動時叫用。 |
SceneOnActivated |
UIKit.UIScene |
當場景變成作用中且能夠回應使用者事件時叫用。 |
SceneOnResignActivation |
UIKit.UIScene |
當場景即將辭職時叫用,並停止回應使用者事件。 |
SceneOpenUrl |
UIKit.UIScene , Foundation.NSSet<UIKit.UIOpenUrlContext> |
當場景要求開啟一或多個 URL 時叫用。 |
SceneRestoreInteractionState |
UIKit.UIScene , Foundation.NSUserActivity |
叫用以還原活動狀態。 |
SceneWillConnect |
UIKit.UIScene 、 、 UIKit.UISceneSession UIKit.UISceneConnectionOptions |
當場景新增至應用程式時叫用。 |
SceneWillContinueUserActivity |
UIKit.UIScene , string |
叫用來準備接收 Handoff 相關數據。 |
SceneWillEnterForeground |
UIKit.UIScene |
當場景即將在前景執行,並讓使用者看見時叫用。 |
WillEnterForeground |
UIKit.UIApplication |
如果應用程式將從背景狀態傳回,則叫用 。 |
WillFinishLaunching |
UIKit.UIApplication , Foundation.NSDictionary |
啟動應用程式時叫用,但狀態還原尚未發生。 |
WillTerminate |
UIKit.UIApplication |
如果應用程式因記憶體限制或直接由用戶終止,則叫用。 |
WindowSceneDidUpdateCoordinateSpace |
UIKit.UIWindowScene 、 、 UIKit.IUICoordinateSpace 、 UIKit.UIInterfaceOrientation UIKit.UITraitCollection |
當場景的大小、方向或特性變更時叫用。 |
重要
除了 之外 PerformFetch
,每個委派都有對應的相同命名擴充方法,可以呼叫 以註冊委派的處理程式。
若要回應所叫用的 iOS 和 Mac Catalyst 生命週期委派,ConfigureLifecycleEvents
請在 類別MauiProgram
的 方法中呼叫 物件CreateMauiapp
上的 MauiAppBuilder
方法。 然後,在 ILifecycleBuilder
物件上呼叫 AddiOS
方法,並指定 Action
為必要委派註冊處理程式的 :
using Microsoft.Maui.LifecycleEvents;
namespace PlatformLifecycleDemo
{
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureLifecycleEvents(events =>
{
#if IOS || MACCATALYST
events.AddiOS(ios => ios
.OnActivated((app) => LogEvent(nameof(iOSLifecycle.OnActivated)))
.OnResignActivation((app) => LogEvent(nameof(iOSLifecycle.OnResignActivation)))
.DidEnterBackground((app) => LogEvent(nameof(iOSLifecycle.DidEnterBackground)))
.WillTerminate((app) => LogEvent(nameof(iOSLifecycle.WillTerminate))));
#endif
static bool LogEvent(string eventName, string type = null)
{
System.Diagnostics.Debug.WriteLine($"Lifecycle event: {eventName}{(type == null ? string.Empty : $" ({type})")}");
return true;
}
});
return builder.Build();
}
}
}
如需 iOS 應用程式生命週期的詳細資訊,請參閱 在 developer.apple.com 上管理您的應用程式生命週期 。
Windows
下表列出叫用的 .NET MAUI 委派,以回應所引發的 Windows 生命週期事件:
委派 | 引數 | 描述 |
---|---|---|
OnActivated |
Microsoft.UI.Xaml.Window , Microsoft.UI.Xaml.WindowActivatedEventArgs |
如果應用程式未繼續,則會在引發平臺 Activated 事件時叫用。 |
OnClosed |
Microsoft.UI.Xaml.Window , Microsoft.UI.Xaml.WindowEventArgs |
引發平臺 Closed 事件時叫用。 |
OnLaunched |
Microsoft.UI.Xaml.Window , Microsoft.UI.Xaml.LaunchActivatedEventArgs |
在建立並啟用原生窗口之後,由 .NET MAUI 的 Application.OnLaunched 覆寫叫用。 |
OnLaunching |
Microsoft.UI.Xaml.Window , Microsoft.UI.Xaml.LaunchActivatedEventArgs |
在建立並啟用原生視窗之前,由 .NET MAUI 的 Application.OnLaunched 覆寫叫用。 |
OnPlatformMessage |
Microsoft.UI.Xaml.Window , WindowsPlatformMessageEventArgs |
當 .NET MAUI 收到特定的原生 Windows 訊息時叫用。 |
OnPlatformWindowSubclassed |
Microsoft.UI.Xaml.Window , WindowsPlatformWindowSubclassedEventArgs |
當 Win32 視窗子類別化時,由 .NET MAUI 叫用。 |
OnResumed |
Microsoft.UI.Xaml.Window |
如果應用程式正在繼續,則會在引發平臺 Activated 事件時叫用。 |
OnVisibilityChanged |
Microsoft.UI.Xaml.Window , Microsoft.UI.Xaml.WindowVisibilityChangedEventArgs |
引發平臺 VisibilityChanged 事件時叫用。 |
OnWindowCreated |
Microsoft.UI.Xaml.Window |
在建立跨平臺 Window 的原生視窗時叫用 。 |
.NET MAUI 會將特定的原生 Windows 訊息公開為具有委派的 OnPlatformMessage
生命週期事件。 此 WindowsPlatformMessageEventArgs
委派隨附的物件包含 MessageId
型 uint
別 的屬性。 您可以檢查此屬性的值,以判斷哪些訊息已傳遞至您的應用程式視窗。 如需 Windows 訊息的詳細資訊,請參閱 Windows 訊息(開始使用 Win32 和 C++)。 如需視窗訊息常數的清單,請參閱 視窗通知。
重要
每個委派都有對應的相同命名擴充方法,可以呼叫 來註冊委派的處理程式。
若要回應所叫用的 Windows 生命週期委派,ConfigureLifecycleEvents
請在 類別MauiProgram
的 方法中呼叫 物件CreateMauiApp
上的 MauiAppBuilder
方法。 然後,在 ILifecycleBuilder
物件上呼叫 AddWindows
方法,並指定 Action
為必要委派註冊處理程式的 :
using Microsoft.Maui.LifecycleEvents;
namespace PlatformLifecycleDemo
{
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureLifecycleEvents(events =>
{
#if WINDOWS
events.AddWindows(windows => windows
.OnActivated((window, args) => LogEvent(nameof(WindowsLifecycle.OnActivated)))
.OnClosed((window, args) => LogEvent(nameof(WindowsLifecycle.OnClosed)))
.OnLaunched((window, args) => LogEvent(nameof(WindowsLifecycle.OnLaunched)))
.OnLaunching((window, args) => LogEvent(nameof(WindowsLifecycle.OnLaunching)))
.OnVisibilityChanged((window, args) => LogEvent(nameof(WindowsLifecycle.OnVisibilityChanged)))
.OnPlatformMessage((window, args) =>
{
if (args.MessageId == Convert.ToUInt32("031A", 16))
{
// System theme has changed
}
}));
#endif
static bool LogEvent(string eventName, string type = null)
{
System.Diagnostics.Debug.WriteLine($"Lifecycle event: {eventName}{(type == null ? string.Empty : $" ({type})")}");
return true;
}
});
return builder.Build();
}
}
}
擷取 Window 物件
平台程式代碼可以使用擴充方法,GetWindow
從平臺生命週期事件擷取應用程式的 Window
物件:
using Microsoft.Maui.LifecycleEvents;
namespace PlatformLifecycleDemo
{
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureLifecycleEvents(events =>
{
#if WINDOWS
events.AddWindows(windows => windows
.OnClosed((window, args) =>
{
IWindow appWindow = window.GetWindow();
}));
#endif
});
return builder.Build();
}
}
}
自定義生命週期事件
雖然 .NET MAUI 會定義叫用來回應所引發平臺生命週期事件的委派,但它只會公開一組常見的平臺生命週期事件。 不過,它也包含一種機制,通常是連結庫作者,可讓應用程式在引發其他平臺生命週期事件時收到通知。 完成此作業的程式如下所示:
- 針對 .NET MAUI 未公開的平臺生命週期事件註冊事件處理程式。
- 在平臺生命週期事件的事件處理程式中,擷取
ILifecycleEventService
實例並呼叫其方法,並指定平臺事件名稱作為其InvokeEvents
自變數。
然後,想要接收平臺生命週期事件通知的應用程式應該修改CreateMauiApp
其 MauiProgram
類別的方法,以在物件上MauiAppBuilder
呼叫 ConfigureLifecycleEvents
方法。 然後,在 ILifecycleBuilder
物件上,呼叫 AddEvent
方法並指定平臺事件名稱,以及 Action
引發平臺事件時要叫用的 。
範例
當原生應用程式視窗第一次轉譯或變更其轉譯大小時,就會發生 WinUI 3 Window.SizeChanged 事件。 .NET MAUI 不會將此平臺事件公開為生命週期事件。 不過,應用程式可以使用下列方法來引發此平臺事件時收到通知:
註冊平臺生命週期事件的事件處理程式 Window.SizeChanged :
using Microsoft.Maui.LifecycleEvents; ... public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); builder .UseMauiApp<App>() .ConfigureLifecycleEvents(events => { #if WINDOWS events.AddWindows(windows => windows .OnWindowCreated(window => { window.SizeChanged += OnSizeChanged; })); #endif }); return builder.Build(); }
在平臺生命週期事件的事件處理程式中,擷取
ILifecycleEventService
實例並呼叫其 方法,並指定平臺事件名稱作為其InvokeEvents
自變數:using Microsoft.Maui.LifecycleEvents; ... #if WINDOWS static void OnSizeChanged(object sender, Microsoft.UI.Xaml.WindowSizeChangedEventArgs args) { ILifecycleEventService service = MauiWinUIApplication.Current.Services.GetRequiredService<ILifecycleEventService>(); service.InvokeEvents(nameof(Microsoft.UI.Xaml.Window.SizeChanged)); } #endif
MauiWinUIApplication
Windows 上的類型可用來透過其Current
屬性存取原生應用程式實例。MauiApplication
Android 上的類型可用來存取原生應用程式實例。 同樣地,MauiUIApplicationDelegate
iOS 上的類型可用來存取原生應用程式實例。警告
使用方法叫用
InvokeEvents
未註冊的事件不會擲回例外狀況。在
CreateMauiApp
類別的 方法中MauiProgram
,呼叫ConfigureLifecycleEvents
物件上的MauiAppBuilder
方法。 然後,在ILifecycleBuilder
物件上,呼叫AddEvent
方法並指定平臺事件名稱,以及Action
引發平臺事件時要叫用的 :using Microsoft.Maui.LifecycleEvents; namespace PlatformLifecycleDemo { public static class MauiProgram { public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); builder .UseMauiApp<App>() .ConfigureLifecycleEvents(events => { #if WINDOWS events.AddWindows(windows => windows .OnWindowCreated(window => { window.SizeChanged += OnSizeChanged; })); events.AddEvent(nameof(Microsoft.UI.Xaml.Window.SizeChanged), () => LogEvent("Window SizeChanged")); #endif static bool LogEvent(string eventName, string type = null) { System.Diagnostics.Debug.WriteLine($"Lifecycle event: {eventName}{(type == null ? string.Empty : $" ({type})")}"); return true; } }); return builder.Build(); } } }
整體效果是當使用者變更 Windows 上的應用程式視窗大小時,會執行 方法中指定的 AddEvent
動作。
注意
方法 AddEvent
也有可指定委派的多載。