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.
Important
Wichtige Konzepte und Begriffe, die Ihr Verständnis für die Nutzung und Erstellung von Laufzeitklassen mit C++/WinRT unterstützen, finden Sie unter Verwenden von APIs mit C++/WinRT und Erstellen von APIs mit C++/WinRT.
Implementieren überschreibbarer Methoden wie MeasureOverride und OnApplyTemplate
Es gibt einige Erweiterungspunkte in XAML, die Ihre Anwendung anschließen kann, z. B.:
Sie leiten ein benutzerdefiniertes Steuerelement von der Laufzeitklasse Control ab, die selbst wiederum von Basislaufzeitklassen abgeleitet ist. Außerdem gibt es overridable Methoden von Control, FrameworkElement und UIElement , die Sie in Ihrer abgeleiteten Klasse überschreiben können. Hier ist ein Codebeispiel, das zeigt, wie man das tun kann.
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 { ... };
...
};
Überschreibbare Methoden stellen sich in verschiedenen Sprachprojektionen anders dar. In C# werden überschreibbare Methoden beispielsweise in der Regel als geschützte virtuelle Methoden deklariert. In C++/WinRT sind sie weder virtuell noch geschützt, aber Sie können sie weiterhin überschreiben und Ihre eigene Implementierung bereitstellen, wie oben gezeigt.
Wenn Sie eine dieser überschreibbaren Methoden in C++/WinRT überschreiben, muss Ihre runtimeclass IDL die Methode nicht deklarieren. Weitere Informationen über die angezeigte base_type-Syntax finden Sie im nächsten Abschnitt dieses Themas (Aufrufen des Basistyps).
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);
}
};
}
Aufruf Ihres Basistyps
Sie können auf Ihren Basistyp zugreifen und Methoden darauf aufrufen, indem Sie den Typalias base_typeverwenden. 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 . Im Folgenden finden Sie ein Beispiel:
struct MyDerivedRuntimeClass : MyDerivedRuntimeClassT<MyDerivedRuntimeClass>
{
...
void Foo()
{
// Call my base type's Bar method.
base_type::Bar();
}
};
Wichtige APIs
Windows developer