Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Important
Pour connaître les concepts et termes essentiels qui prennent en charge votre compréhension de l’utilisation et de la création de classes runtime avec C++/WinRT, consultez Consommer des API avec C++/WinRT et créer des API avec C++/WinRT.
Implémentation de méthodes substituables , telles que MeasureOverride et OnApplyTemplate
Il existe quelques points d’extension en XAML que votre application peut connecter, par exemple :
Vous dérivez un contrôle personnalisé de la classe runtime Control , qui dérive elle-même de classes runtime de base. Et il existe des overridable méthodes de Control, FrameworkElement et UIElement que vous pouvez remplacer dans votre classe dérivée. Voici un exemple de code montrant comment faire cela.
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 { ... };
...
};
Les méthodes substituables se présentent différemment dans différentes projections de langage. En C#, par exemple, les méthodes substituables apparaissent généralement en tant que méthodes virtuelles protégées. Dans C++/WinRT, ils ne sont ni virtuels ni protégés, mais vous pouvez toujours les remplacer et fournir votre propre implémentation, comme indiqué ci-dessus.
Si vous redéfinissez l’une de ces méthodes pouvant être redéfinies dans C++/WinRT, votre fichier IDL runtimeclass ne doit pas déclarer cette méthode. Pour plus d’informations sur la base_type syntaxe indiquée, consultez la section suivante de cette rubrique (Appel de votre type de 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);
}
};
}
Appel de votre type de base
Vous pouvez accéder à votre type de base et appeler des méthodes sur celui-ci à l’aide de l’alias base_typede type. Nous avons vu un exemple de ceci dans la section précédente ; mais vous pouvez utiliser base_type pour accéder à n’importe quel membre de classe de base (pas seulement les méthodes substituées). Prenons un exemple :
struct MyDerivedRuntimeClass : MyDerivedRuntimeClassT<MyDerivedRuntimeClass>
{
...
void Foo()
{
// Call my base type's Bar method.
base_type::Bar();
}
};
API importantes
Windows developer