Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wichtig
Wichtige Konzepte und Begriffe im Zusammenhang mit der Nutzung und Erstellung von Laufzeitklassen mit C++/WinRT findest du unter Verwenden von APIs mit C++/WinRT sowie unter Erstellen von APIs mit C++/WinRT.
Implementieren überschreibbarer Methoden wie MeasureOverride und OnApplyTemplate
Es gibt einige Erweiterungspunkte in XAML, an die Ihre Anwendung angeschlossen werden kann, z. B.:
Ein benutzerdefiniertes Steuerelement wird von der Laufzeitklasse Control abgeleitet, die wiederum selbst von Basislaufzeitklassen abgeleitet wird. Ferner stehen overridable-Methoden von Control, FrameworkElement und UIElement zur Verfügung, die Sie in Ihrer abgeleiteten Klasse überschreiben können. Das folgende Codebeispiel veranschaulicht, wie das geht:
struct BgLabelControl : BgLabelControlT<BgLabelControl>
{
...
// Control overrides.
void OnPointerPressed(Windows::UI::Xaml::Input::PointerRoutedEventArgs const& /* e */) const { ... };
// FrameworkElement overrides.
Windows::Foundation::Size MeasureOverride(Windows::Foundation::Size const& /* availableSize */) const { ... };
void OnApplyTemplate() const { ... };
// UIElement overrides.
Windows::UI::Xaml::Automation::Peers::AutomationPeer OnCreateAutomationPeer() const { ... };
...
};
Überschreibbare Methoden werden in verschiedenen Sprachprojektionen unterschiedlich dargestellt. In C# werden überschreibbare Methoden beispielsweise in der Regel als geschützte virtuelle Methoden dargestellt. In C++/WinRT sind sie zwar weder virtuell noch geschützt, du kannst sie aber trotzdem überschreiben und eine eigene Implementierung verwenden, wie weiter oben gezeigt.
Wenn Sie eine dieser überschreibbaren Methoden in C++/WinRT überschreiben, darf Ihre runtimeclass-IDL die Methode nicht deklarieren. Weitere Informationen zur base_type-Syntax finden Sie im nächsten Abschnitt in diesem Thema (Aufrufen des Basistyps).
IDL-
namespace Example
{
runtimeclass CustomVSM : Windows.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::Windows::UI::Xaml::Controls::Control const& control, winrt::Windows::UI::Xaml::FrameworkElement const& templateRoot, winrt::hstring const& stateName, winrt::Windows::UI::Xaml::VisualStateGroup const& group, winrt::Windows::UI::Xaml::VisualState const& state, bool useTransitions) {
return base_type::GoToStateCore(control, templateRoot, stateName, group, state, useTransitions);
}
};
}
Aufrufen des Basistyps
Sie können auf Ihren Basistyp zugreifen und Methoden darauf aufrufen, indem Sie den Typalias „base_type“ verwenden. Wir haben ein Beispiel dafür im vorherigen Abschnitt gesehen; Sie können jedoch für den Zugriff auf ein beliebiges Basisklassenelement (nicht nur überschriebene Methoden) verwenden base_type . Hier sehen Sie ein Beispiel:
struct MyDerivedRuntimeClass : MyDerivedRuntimeClassT<MyDerivedRuntimeClass>
{
...
void Foo()
{
// Call my base type's Bar method.
base_type::Bar();
}
};