Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Důležité
Základní koncepty a termíny, které podporují pochopení toho, jak využívat a vytvářet třídy modulu runtime pomocí C++/WinRT, najdete v tématu Využívání rozhraní API pomocí C++/WinRT a Vytváření rozhraní API pomocí C++/WinRT.
Implementace přepisovatelných metod, jako jsou MeasureOverride a OnApplyTemplate
Xaml má několik bodů rozšíření, ke kterým se vaše aplikace může připojit, například:
Odvozujete vlastní ovládací prvek z třídy modulu runtime Control , která je dále odvozena od základních tříd modulu runtime. A existují overridable metody Control, FrameworkElementa UIElement, které můžete přepsat v odvozené třídě. Tady je příklad kódu, který ukazuje, jak to udělat.
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 { ... };
...
};
přepisovatelné metody se v různých jazykových projekcích vyskytují odlišně. V jazyce C# se například překrývatelné metody obvykle objevují jako chráněné virtuální metody. V jazyce C++/WinRT nejsou virtuální ani chráněné, ale přesto je můžete přepsat a poskytnout vlastní implementaci, jak je znázorněno výše.
Pokud přepisujete jednu z těchto přetížitelných metod v jazyce C++/WinRT, nesmí váš soubor runtimeclass IDL deklarovat metodu. Další informace o base_type zobrazené syntaxi najdete v další části tohoto tématu (volání základního typu).
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);
}
};
}
Volání základního datového typu
K základnímu typu můžete přistupovat a volat na něm metody pomocí typu aliasu base_type. Viděli jsme příklad v předchozí části; ale můžete použít base_type pro přístup k libovolnému členu základní třídy (nejen k překrytým metodám). Tady je příklad:
struct MyDerivedRuntimeClass : MyDerivedRuntimeClassT<MyDerivedRuntimeClass>
{
...
void Foo()
{
// Call my base type's Bar method.
base_type::Bar();
}
};
Důležitá rozhraní API
- třídy
Control