Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Important
Para conocer los conceptos y términos esenciales que admiten su comprensión de cómo consumir y crear clases en tiempo de ejecución con C++/WinRT, consulte Consumo de API con C++/WinRT y Creación de API con C++/WinRT.
Implementación de métodos invalidables , como MeasureOverride y OnApplyTemplate
Hay algunos puntos de extensión en XAML en los que la aplicación puede conectar, por ejemplo:
- MedidaSobrecarga
- OnApplyTemplate
- GoToStateCore
Se deriva un control personalizado de la clase en tiempo de ejecución Control , que se deriva aún más de las clases en tiempo de ejecución base. Y hay overridable métodos de Control, FrameworkElement y UIElement que se pueden invalidar en la clase derivada. Este es un ejemplo de código que muestra cómo hacerlo.
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 { ... };
...
};
Los métodos reemplazables se presentan de forma diferente en diferentes proyecciones de lenguaje. En C#, por ejemplo, los métodos reemplazables suelen aparecer como métodos virtuales protegidos. En C++/WinRT, no son virtuales ni protegidas, pero todavía puedes invalidarlos y proporcionar tu propia implementación, como se muestra anteriormente.
Si sobrescribe uno de estos métodos que se pueden sobrescribir en C++/WinRT, su runtimeclass IDL no debe declarar ese método. Para obtener más información sobre la base_type sintaxis que se muestra, consulte la sección siguiente de este tema (Llamada al 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);
}
};
}
Llamada al tipo base
Puede acceder a su tipo base e invocar métodos en él mediante el alias de tipo base_type. Hemos visto un ejemplo de esto en la sección anterior; pero puede usar base_type para tener acceso a cualquier miembro de clase base (no solo métodos invalidados). Este es un ejemplo:
struct MyDerivedRuntimeClass : MyDerivedRuntimeClassT<MyDerivedRuntimeClass>
{
...
void Foo()
{
// Call my base type's Bar method.
base_type::Bar();
}
};