FrameworkElement.Loaded 事件
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
// Register
event_token Loaded(RoutedEventHandler const& handler) const;
// Revoke with event_token
void Loaded(event_token const* cookie) const;
// Revoke with event_revoker
FrameworkElement::Loaded_revoker Loaded(auto_revoke_t, RoutedEventHandler const& handler) const;
public event RoutedEventHandler Loaded;
function onLoaded(eventArgs) { /* Your code */ }
frameworkElement.addEventListener("loaded", onLoaded);
frameworkElement.removeEventListener("loaded", onLoaded);
- or -
frameworkElement.onloaded = onLoaded;
Public Custom Event Loaded As RoutedEventHandler
<frameworkElement Loaded="eventhandler"/>
事件類型
範例
和Unloaded的 Loaded
處理常式會自動附加至任何使用 NavigationHelper
專案範本類別來支援的頁面。 事件連接是在建構函式中完成。 處理常式是使用 Lambda 撰寫,並附加其他事件處理常式,讓頁面導覽可以使用滑鼠或鍵盤事件。
this.Page.Loaded += (sender, e) =>
{
// Keyboard and mouse navigation only apply when occupying the entire window
if (this.Page.ActualHeight == Window.Current.Bounds.Height &&
this.Page.ActualWidth == Window.Current.Bounds.Width)
{
// Listen to the window directly so focus isn't required
Window.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated +=
CoreDispatcher_AcceleratorKeyActivated;
Window.Current.CoreWindow.PointerPressed +=
this.CoreWindow_PointerPressed;
}
};
事件 Loaded
是開始裝飾性動畫的好時機,這些動畫不會系結至主題動畫或其他觸發程式。 這個範例示範在 XAML 中觸發PointAnimation,方法是將處理常式連接到 Loaded
在動畫分鏡腳本上呼叫Begin的方法。
<Canvas Width="450" Height="350">
<Canvas.Resources>
<Storyboard x:Name="myStoryboard">
<!-- Animate the center point of the ellipse from 100 X, 300 Y
to 400 X, 100 Y over 5 seconds. -->
<PointAnimation
Storyboard.TargetProperty="Center"
Storyboard.TargetName="MyAnimatedEllipseGeometry"
Duration="0:0:5"
From="100,300"
To="400,100"
RepeatBehavior="Forever" EnableDependentAnimation="True"/>
</Storyboard>
</Canvas.Resources>
<Path Fill="Blue" Loaded="Start_Animation">
<Path.Data>
<!-- Describes an ellipse. -->
<EllipseGeometry x:Name="MyAnimatedEllipseGeometry"
Center="200,100" RadiusX="15" RadiusY="15" />
</Path.Data>
</Path>
</Canvas>
// Start the animation when the object loads
void SampleApp::Page::Start_Animation(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
myStoryboard->Begin();
}
// Start the animation when the object loads
private void Start_Animation(object sender, RoutedEventArgs e)
{
myStoryboard.Begin();
}
備註
雖然此事件使用 RoutedEventHandler 委派和 RoutedEventArgs 做為事件資料,但事件不是路由事件。 它只能處理在源自事件的專案上, (換句話說, 傳送者) 。 此事件的事件資料中的OriginalSource一律 null
為 。
已載入和物件存留期
在Windows 應用程式 SDK實作中, Loaded
保證會在套用控制項範本之後發生事件,而且您可以套用 XAML 範本來取得所建立物件的參考。
事件 Loaded
可用來作為點來連結來自範本的專案上的事件處理常式,或叫用依賴套用範本結果之子專案存在的邏輯。 載入是慣用的物件存留期事件,可在 UI 的 XAML 控制項顯示之前,使用您的應用程式程式碼操作專案樹狀結構。 您也可以從 Loaded 處理常式呼叫 VisualStateManager.GoToState 方法,以設定範本中定義的初始檢視狀態,如果初始配置上沒有其他事件也會發生, (SizeChanged 會在初始配置) 發生。
在Windows 應用程式 SDK實作中的計時 Loaded
,類似于Windows Presentation Foundation (WPF) 實作中的計時。 相反地,Microsoft Silverlight 實作有計時問題,您無法依賴發生時 Loaded
載入的範本。 如果您要從這些 XAML 架構移轉 XAML 或程式碼後置,建議您調整處理常式中 Loaded
要執行的動作,以適合Windows 應用程式 SDK實作的範本載入時間。
若要存取來自已套用範本的專案,您可以使用 VisualTreeHelper 靜態方法,並依索引流覽子項目。 或者,您可以在樣板化內容的根項目上呼叫 FindName 方法,以尋找具有指定 x:Name 屬性值 之範本的特定部分。 請注意,您必須在範本根目錄上呼叫 FindName ,而不是控制項本身,因為每當範本所建立的物件是由該範本所建立的範本所建立時, (,請參閱 XAML 名稱範圍) 。 若要進入範本根目錄,請使用 VisualTreeHelper.GetChild(target,0)
where target
是套用範本的物件。 取得該根目錄之後,您就可以前往具名元件。
如果您要衍生自現有的控制項,而不是根據每個實例處理 Loaded
,您可以覆寫 OnApplyTemplate ,使預設類別行為的行為部分成為一部分。
OnApplyTemplate 特別適用于這種情況的回呼,其中您有已套用範本的物件樹狀結構,而現在您想要檢查或調整視覺效果。 這是定義自訂控制項行為的重要部分,包括宣告啟動視覺狀態和無法使用 On事件 覆寫模式定義的連接類別處理常式等動作。 其中一個差異在於,您應該使用GetTemplateChild來尋找具名元件,而不是FindName。
LayoutUpdated 是相關的事件。
LayoutUpdated事件是啟用控制項序列的最後一個「物件存留期」事件,並在 之後 Loaded
發生。 不過,針對涉及配置變更的物件引發 LayoutUpdated ,而不只是樹狀結構中的後續父代。 UI 中的數個物件可能會同時引發 LayoutUpdated 。 版面配置變更會因各種原因而發生,例如使用者變更檢視狀態或螢幕解析度,或以程式設計方式調整相同 UI 或版面配置容器中其他元素的大小。 基於這個理由, Loaded
執行適用于初始配置或套用範本的程式碼通常是較佳的選擇。
對於在頁面之間使用導覽的應用程式程式碼,請勿使用 Page.OnNavigatedTo 進行 元素操作或目的地頁面上控制項的狀態變更。 此虛擬方法會在載入範本之前叫用,因此範本中的元素尚無法使用。 相反地,在新載入頁面內容的根目錄附加 Loaded
事件處理常式,並在事件處理常式中 Loaded
執行任何元素操作、狀態變更、事件連接等等。