Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Viktigt!
Viktiga begrepp och termer som stöder din förståelse av hur du använder och skapar körningsklasser med C++/WinRT finns i Använda API:er med C++/WinRT och Redigerings-API:er med C++/WinRT.
Implementera åsidosättningsbara metoder, till exempel MeasureOverride och OnApplyTemplate
Det finns några tilläggspunkter i XAML som programmet kan ansluta till, till exempel:
Du härleder en anpassad kontroll från körningsklassen Control, som i sin tur härleds från grundläggande körningsklasser. Och det finns overridable metoder för Kontroll, FrameworkElement och UIElement som du kan åsidosätta i din härledda klass. Här är ett kodexempel som visar hur du gör det.
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 { ... };
...
};
Overridable metoder presenterar sig olikt i olika språkprojektioner. I C#, till exempel, visas åsidosättbara metoder vanligtvis som skyddade virtuella metoder. I C++/WinRT är de varken virtuella eller skyddade, men du kan fortfarande åsidosätta dem och tillhandahålla din egen implementering, som du ser ovan.
Om du åsidosätter någon av dessa övergripande metoder i C++/WinRT får din runtimeclass IDL inte deklarera metoden. Mer information om den base_type syntax som visas finns i nästa avsnitt i det här avsnittet (Anropa din bastyp).
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);
}
};
}
Anropa din bastyp
Du kan komma åt bastypen och anropa metoder på den med hjälp av typaliaset base_type. Vi såg ett exempel på detta i föregående avsnitt. men du kan använda base_type för att komma åt valfri basklassmedlem (inte bara åsidosatta metoder). Här är ett exempel:
struct MyDerivedRuntimeClass : MyDerivedRuntimeClassT<MyDerivedRuntimeClass>
{
...
void Foo()
{
// Call my base type's Bar method.
base_type::Bar();
}
};
Viktiga API:er
Windows developer