Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Fontos
Azokat az alapvető fogalmakat és kifejezéseket, amelyek támogatják a futtatókörnyezeti osztályok C+++/WinRT használatával történő felhasználásának és szerkesztésének megértését, olvassa el az API-k használata c++/WinRT-lel és Szerzői API-k c++/WinRT használatával című témakört.
Felülírható módszerek implementálása, például MeasureOverride és OnApplyTemplate
Az XAML-ben vannak olyan bővítménypontok, amelyekbe az alkalmazás csatlakoztatható, például:
Egy egyéni vezérlőt a Control runtime osztályból származtat, amely maga is az alap futtatókörnyezeti osztályokból származik.
overridable A Control, FrameworkElement és UIElement metódusok felülbírálhatók a származtatott osztályban. Íme egy kódpélda, amely bemutatja, hogyan lehet ezt megtenni.
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 { ... };
...
};
A felülírható módszerek eltérően jelenik meg a különböző nyelvi előrejelzésekben. A C#-ban például a felülírható metódusok általában védett virtuális metódusokként jelennek meg. A C++/WinRT-ben ezek nem virtuálisak és nem is védettek, de továbbra is felülbírálhatja őket, és saját implementációt biztosíthat, ahogyan az fent látható.
Ha a C++/WinRT-ben ezen felüldefiniálható metódusok egyikét felüldefiniálja, akkor az runtimeclass IDL-ben nem szabad deklarálni a metódust. A szintaxissal kapcsolatos base_type további információkért tekintse meg a témakör következő szakaszát (Az alaptípus meghívása).
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);
}
};
}
Az alaptípus meghívása
A típus aliasával base_typeelérheti az alaptípust, és meghívhatja rajta a metódusokat. Láttunk erre példát az előző szakaszban; de a base_type használatával a bázisosztály bármely tagjához hozzáférhet (nem csak a felülírt metódusokhoz). Íme egy példa:
struct MyDerivedRuntimeClass : MyDerivedRuntimeClassT<MyDerivedRuntimeClass>
{
...
void Foo()
{
// Call my base type's Bar method.
base_type::Bar();
}
};
Fontos API-k
Windows developer