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

事件类型

示例

UnloadedLoaded处理程序会自动附加到使用项目模板中的 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 是使用应用代码操作元素树结构的首选对象生存期事件。 如果初始 (布局) 上也不存在其他事件,也适合从 Loaded 处理程序调用 VisualStateManager.GoToState 方法,以便设置模板中定义的初始视图状态。

Windows 应用 SDK 实现中的 计时Loaded与 wpf) 实现中的Windows Presentation Foundation (计时类似。 相比之下,Microsoft Silverlight 实现有一个计时问题,即在发生时 Loaded 无法依赖正在加载的模板。 如果要从这些 XAML 框架迁移 XAML 或代码隐藏,可能需要调整处理程序中Loaded执行的操作,使其适合Windows 应用 SDK实现的模板加载计时。

若要访问来自已应用模板的项,可以使用 VisualTreeHelper 静态方法并按索引导航子元素。 或者,可以对模板化内容的根元素调用 FindName 方法,以查找具有给定 x:Name 属性值 的模板的特定部分。 请注意,必须在模板根而不是控件本身上调用 FindName ,因为每当由特定于该模板 (的模板创建对象时,都创建了一个 XAML 名称范围,有关详细信息,请参阅 XAML 名称范围) 。 若要访问模板根目录,请使用 VisualTreeHelper.GetChild(target,0) ,其中 target 是应用模板的对象。 获得该根后,即可访问命名部分。

如果从现有控件派生,则可以重写 OnApplyTemplate,使行为成为默认类行为的一部分,而不是按实例进行处理LoadedOnApplyTemplate 专门用作这种情况的回调,其中你有一个来自已应用模板的对象树,现在想要检查或调整视觉对象。 这是定义自定义控件行为的关键部分,包括声明起始视觉状态和无法使用 On事件 替代模式定义的接线类处理程序等操作。 一个区别是,与 OnApplyTemplate 范围相比,应使用 GetTemplateChild 查找命名部件,而不是 FindName

LayoutUpdated 是相关事件。 LayoutUpdated 事件是启用控件序列中的最后一个“对象生存期”事件,在 之后Loaded发生。 但是, LayoutUpdated 是为布局更改中涉及的对象触发的,而不仅仅是树中的连续父级。 UI 中的多个对象可能同时触发 LayoutUpdated 。 布局更改发生的原因多种多样,例如用户更改视图状态或屏幕分辨率,或者以编程方式调整同一 UI 或布局容器中的其他元素的大小。 因此, Loaded 通常是运行与初始布局或已应用模板一起使用的代码的更好选择。

对于在页面之间使用导航的应用代码,不要使用 Page.OnNavigatedTo 对目标页上的控件进行元素操作或状态更改。 此虚拟方法在加载模板之前调用,因此模板中的元素尚不可用。 相反,在新加载的页面内容的根目录中附加 Loaded 事件处理程序,并在事件处理程序中 Loaded 执行任何元素操作、状态更改、事件连接等。

适用于

另请参阅