FrameworkElement.Loaded Evento
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Ocorre quando um FrameworkElement foi construído e adicionado à árvore de objetos e está pronto para interação.
// 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"/>
Tipo de evento
Exemplos
Manipuladores para Loaded
e Unloaded são anexados automaticamente a qualquer página que use a NavigationHelper
classe dos modelos de projeto para suporte. A fiação do evento é feita no construtor. O manipulador é escrito usando um lambda e anexa outros manipuladores de eventos para que a navegação de página possa usar eventos de mouse ou teclado.
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;
}
};
O Loaded
evento é um bom momento para iniciar animações decorativas que não estão vinculadas a animações de tema ou outros gatilhos. Este exemplo mostra como disparar um PointAnimation em XAML, conectando um Loaded
manipulador a um método que chama Begin em um Storyboard de animação.
<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();
}
Comentários
Embora esse evento use o delegado RoutedEventHandler e RoutedEventArgs como dados de evento, o evento não é um evento roteado. Ele só pode ser manipulado no elemento que origina o evento (em outras palavras, o remetente).
OriginalSource nos dados de evento para esse evento é sempre null
.
Tempo de vida carregado e objeto
Na implementação do SDK do Aplicativo Windows, é garantido que o Loaded
evento ocorra depois que um modelo de controle é aplicado e você pode obter referências a objetos criados aplicando o modelo XAML.
O Loaded
evento pode ser usado como um ponto para conectar manipuladores de eventos em elementos provenientes de um modelo ou para invocar a lógica que depende da existência de elementos filho que são o resultado de um modelo aplicado. Carregado é o evento de tempo de vida do objeto preferencial para manipular estruturas de árvore de elementos com o código do aplicativo antes da exibição de controles XAML para sua interface do usuário. Também é apropriado chamar o método VisualStateManager.GoToState de um manipulador Loaded para definir um estado de exibição inicial definido no modelo, se não houver nenhum outro evento que também ocorra no layout inicial (SizeChanged ocorre no layout inicial).
O tempo de Loaded
na implementação do SDK do Aplicativo Windows é semelhante ao tempo na implementação do WPF (Windows Presentation Foundation). Por outro lado, a implementação do Microsoft Silverlight teve um problema de tempo em que você não podia confiar no modelo que estava sendo carregado quando Loaded
ocorreu. Se você estiver migrando XAML ou code-behind dessas estruturas XAML, convém ajustar o que você faz em um Loaded
manipulador para ser apropriado para o tempo de carregamento do modelo da implementação do SDK do Aplicativo Windows.
Para acessar os itens provenientes de um modelo aplicado, você pode usar os métodos estáticos VisualTreeHelper e navegar pelos elementos filho por índice. Ou você pode chamar o método FindName no elemento raiz do conteúdo modelo para encontrar uma parte específica do modelo com um determinado valor de atributo x:Name . Observe que você deve chamar FindName na raiz do modelo em vez do controle em si, porque há um namescope XAML criado sempre que os objetos são criados por um modelo específico para esse modelo (para obter mais informações, consulte Namescopes XAML). Para acessar a raiz do modelo, use VisualTreeHelper.GetChild(target,0)
onde target
é o objeto em que o modelo é aplicado. Depois de obter essa raiz, você poderá acessar as partes nomeadas depois disso.
Se você estiver derivando de um controle existente, em vez de manipular Loaded
por instância, poderá substituir OnApplyTemplate para tornar o comportamento parte do comportamento da classe padrão.
OnApplyTemplate destina-se especificamente como o retorno de chamada para essa situação, em que você tem uma árvore de objetos do modelo aplicado e agora deseja examinar ou ajustar os visuais. Essa é uma parte fundamental da definição de comportamento para um controle personalizado, incluindo ações como declarar os estados visuais iniciais e manipuladores de classe de fiação que não podem ser definidos usando o padrão de substituição OnEvent . Uma diferença é que, no escopo OnApplyTemplate , você deve usar GetTemplateChild para localizar partes nomeadas em vez de FindName.
LayoutUpdated é um evento relacionado. O evento LayoutUpdated é o último evento de "tempo de vida do objeto" na sequência de habilitação de um controle e ocorre após Loaded
. No entanto, LayoutUpdated é acionado para objetos envolvidos em uma alteração de layout, não apenas pais sucessivos na árvore. Vários objetos em uma interface do usuário podem disparar LayoutUpdated ao mesmo tempo. As alterações de layout ocorrem por vários motivos, como o usuário alterando o estado de exibição ou a resolução da tela ou o redimensionamento programático de outros elementos na mesma interface do usuário ou contêiner de layout. Por esse motivo, Loaded
geralmente é uma opção melhor para executar o código que funciona com um layout inicial ou um modelo aplicado.
Para o código do aplicativo que usa a navegação entre páginas, não use Page.OnNavigatedTo para manipulação de elementos ou alteração de estado de controles na página de destino. Esse método virtual é invocado antes que o modelo seja carregado, portanto, os elementos dos modelos ainda não estão disponíveis. Em vez disso, anexe um Loaded
manipulador de eventos na raiz do conteúdo da página recém-carregada e execute manipulações de elemento, alterações de estado, fiação de evento e assim por diante no Loaded
manipulador de eventos.