FrameworkElement.Loaded 事件

定義

FrameworkElement 已建構並新增至物件樹狀結構,且已準備好進行互動時發生。

// 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"/>
 

事件類型

範例

Loaded 和 Unloaded 的處理常式會自動附加至從專案範本使用 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();
}
' Start the animation when the object loads
Private Sub Start_Animation(ByVal sender As Object, ByVal e As EventArgs)
    myStoryboard.Begin()
End Sub

備註

雖然此事件使用 RoutedEventHandler 委派和 RoutedEventArgs 作為事件資料,但事件不是路由事件。 它只能在產生事件 (的專案上處理,換句話說, 傳送者) 。 此事件之事件資料中的OriginalSource一律為Null

已載入和物件存留期

在Windows 執行階段實作中,Loaded 事件保證會在套用控制項範本之後發生,而且您可以套用 XAML 範本來取得所建立物件的參考。

Loaded 事件可用來連結來自範本之元素上的事件處理常式,或叫用依賴所套用範本結果之子項目存在的邏輯。 載入是慣用的物件存留期事件,可在 UI 的 XAML 控制項顯示之前,使用您的應用程式程式碼操作元素樹狀結構。 如果初始版面配置上沒有其他事件, (SizeChanged會發生于初始版面配置) ,也適合從 Loaded 處理常式呼叫VisualStateManager.GoToState方法,以設定範本中定義的初始檢視狀態。

在Windows 執行階段實作中載入的時間,類似于其在 Windows Presentation Foundation (WPF) 實作中的計時。 相反地,Microsoft Silverlight 實作有計時問題,您無法依賴載入時載入的範本。 如果您要從這些 XAML 架構移轉 XAML 或程式碼後置,建議您調整您在 Loaded 處理常式中執行的動作,以適合Windows 執行階段實作的範本載入時機。

若要存取來自已套用範本的專案,您可以使用 VisualTreeHelper 靜態方法,並依索引巡覽子項目。 或者,您可以在樣板化內容的根項目上呼叫 FindName 方法,以尋找具有指定 x:Name 屬性值 之範本的特定部分。 請注意,您必須在範本根目錄上呼叫 FindName ,而不是控制項本身,因為每當範本所建立的物件是由該範本特定的範本所建立時,就會建立 XAML 名稱範圍 (,如需詳細資訊,請參閱 XAML 名稱範圍) 。 若要取得範本根目錄,請使用 VisualTreeHelper.GetChild(target,0) where target 是套用範本的物件。 取得該根之後,您就可以前往具名元件。

如果您要衍生自現有的控制項,而不是依每個實例處理 Loaded,您可以覆寫 OnApplyTemplate ,讓行為成為預設類別行為的一部分。 OnApplyTemplate 特別適用于這種情況的回呼,其中您有套用範本中物件的樹狀結構,而現在您想要檢查或調整視覺效果。 這是定義自訂控制項行為的重要部分,包括宣告起始視覺狀態和無法使用 On事件 覆寫模式定義之連接類別處理常式等動作。 其中一個差異在於,您應該使用GetTemplateChild來尋找具名元件,而不是FindName

LayoutUpdated 是相關的事件。 LayoutUpdated事件是啟用控制項序列中的最後一個「物件存留期」事件,會在 Loaded 之後發生。 不過,針對涉及配置變更的物件引發 LayoutUpdated ,而不只是樹狀結構中的後續父代。 UI 中的數個物件可能會同時 引發 LayoutUpdated 。 因為各種原因而發生版面配置變更,例如使用者變更檢視狀態或螢幕解析度,或以程式設計方式調整相同 UI 或版面配置容器中其他元素的大小。 因此,Loaded 通常是執行適用于初始配置或已套用範本之程式碼的較佳選擇。

對於使用頁面之間流覽的應用程式程式碼,請勿使用 Page.OnNavigatedTo 進行元素操作或目的地頁面上控制項的狀態變更。 在載入範本之前,會叫用 OnNavigatedTo 虛擬方法,因此尚未提供來自範本的專案。 相反地,在新載入頁面內容的根目錄附加 Loaded 事件處理常式,並在 Loaded 事件處理常式中執行任何元素操作、狀態變更、事件連接等等。

適用於

另請參閱