Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Important
Para obter conceitos e termos essenciais que dão suporte à compreensão de como consumir e criar classes de runtime com C++/WinRT, consulte Consumir APIs com APIs C++/WinRT e Criar com C++/WinRT.
Implementando métodos substituíveis , como MeasureOverride e OnApplyTemplate
Há alguns pontos de extensão no XAML nos quais seu aplicativo pode se conectar, por exemplo:
Você deriva um controle personalizado da classe de runtime Control, a qual, por sua vez, deriva de classes base de runtime. E há overridable métodos de Control, FrameworkElement e UIElement que você pode substituir em sua classe derivada. Aqui está um exemplo de código que mostra como fazer isso.
struct BgLabelControl : BgLabelControlT<BgLabelControl>
{
...
// Control overrides.
void OnPointerPressed(Microsoft::UI::Xaml::Input::PointerRoutedEventArgs const& /* e */) const { ... };
// FrameworkElement overrides.
Windows::Foundation::Size MeasureOverride(Windows::Foundation::Size const& /* availableSize */) const { ... };
void OnApplyTemplate() const { ... };
// UIElement overrides.
Microsoft::UI::Xaml::Automation::Peers::AutomationPeer OnCreateAutomationPeer() const { ... };
...
};
Métodos substituíveis apresentam-se de forma diferente em diferentes projeções de linguagem. Em C#, por exemplo, métodos substituíveis normalmente aparecem como métodos virtuais protegidos. No C++/WinRT, eles não são virtuais nem protegidos, mas você ainda pode substituí-los e fornecer sua própria implementação, conforme mostrado acima.
Se você estiver sobrescrevendo um desses métodos que podem ser sobrescritos no C++/WinRT, sua runtimeclass IDL não deve declarar o método. Para obter mais informações sobre a base_type sintaxe mostrada, consulte a próxima seção neste tópico (Chamando seu tipo base).
IDL
namespace Example
{
runtimeclass CustomVSM : Microsoft.UI.Xaml.VisualStateManager
{
CustomVSM();
// note that we don't declare GoToStateCore here
}
}
C++/WinRT
namespace winrt::Example::implementation
{
struct CustomVSM : CustomVSMT<CustomVSM>
{
CustomVSM() {}
bool GoToStateCore(winrt::Microsoft::UI::Xaml::Controls::Control const& control, winrt::Microsoft::UI::Xaml::FrameworkElement const& templateRoot, winrt::hstring const& stateName, winrt::Microsoft::UI::Xaml::VisualStateGroup const& group, winrt::Microsoft::UI::Xaml::VisualState const& state, bool useTransitions) {
return base_type::GoToStateCore(control, templateRoot, stateName, group, state, useTransitions);
}
};
}
Chamando seu tipo base
Você pode acessar seu tipo base e chamar métodos nele usando o alias de tipo base_type. Vimos um exemplo disso na seção anterior; mas você pode usar base_type para acessar qualquer membro de classe base (não apenas métodos substituídos). Veja um exemplo:
struct MyDerivedRuntimeClass : MyDerivedRuntimeClassT<MyDerivedRuntimeClass>
{
...
void Foo()
{
// Call my base type's Bar method.
base_type::Bar();
}
};
APIs importantes
Windows developer