相关文章推荐
好帅的饺子  ·  vue app版本更新 - CSDN文库·  6 月前    · 
// 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"/>
	

加载和 卸载 的处理程序会自动附加到使用项目模板中 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;

加载事件是启动与主题动画或其他触发器无关的装饰动画的好时机。 本示例演示如何在 XAML 中触发 PointAnimation,方法是将加载处理程序连接到调用动画情节提要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 运行时实现中,在应用控件模板后,可以保证加载事件发生,并且可以通过应用 XAML 模板来获取对所创建对象的引用。

Loaded 事件可用作一个点来挂钩来自模板的元素的事件处理程序,或调用依赖于所应用模板结果的子元素存在的逻辑。 加载是用于在 UI 显示 XAML 控件之前使用应用代码操作元素树结构的首选对象生存期事件。 它还适合从加载处理程序调用 VisualStateManager.GoToState 方法,以便设置模板中定义的初始视图状态,如果在初始布局上也不存在其他事件, (SizeChanged 在初始布局) 发生。

Windows 运行时实现中加载的计时类似于在 WPF) 实现Windows Presentation Foundation (计时。 相比之下,Microsoft Silverlight 实现存在计时问题,无法依赖加载时加载的模板。 如果要从这些 XAML 框架迁移 XAML 或代码隐藏,可能需要调整加载处理程序中执行的操作,以适合Windows 运行时实现的模板加载计时。

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

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

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

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