Metadane właściwości szablonu

Opcje metadanych właściwości struktury są zgłaszane dla właściwości elementów obiektów uważanych za na poziomie struktury WPF w architekturze Windows Presentation Foundation (WPF). Ogólnie rzecz biorąc, oznaczenie na poziomie struktury WPF wiąże się z tym, że funkcje takie jak renderowanie, powiązanie danych i uściślenia systemu właściwości są obsługiwane przez interfejsy API prezentacji WPF i pliki wykonywalne. Metadane właściwości struktury są odpytywane przez te systemy w celu określenia cech specyficznych dla poszczególnych właściwości elementu.

Wymagania wstępne

W tym temacie założono, że rozumiesz właściwości zależności z perspektywy konsumenta istniejących właściwości zależności w klasach Windows Presentation Foundation (WPF) i zapoznasz się z omówieniem właściwości zależności. Należy również przeczytać metadane właściwości zależności.

Co jest przekazywane przez metadane właściwości struktury

Metadane właściwości struktury można podzielić na następujące kategorie:

  • Właściwości układu raportowania, które mają wpływ na element (AffectsArrange, AffectsMeasure, AffectsRender). Te flagi można ustawić w metadanych, jeśli właściwość ma wpływ na te odpowiednie aspekty, a także wdrażasz MeasureOverride / ArrangeOverride metody w klasie, aby dostarczyć konkretne zachowanie renderowania i informacje do systemu układu. Zazwyczaj taka implementacja sprawdzałaby nieprawidłowe właściwości we właściwościach zależności, w których każda z tych właściwości układu była prawdziwa w metadanych właściwości, a tylko te unieważnienia wymagały żądania nowego przekazania układu.

  • Właściwości układu raportowania, które wpływają na element nadrzędny elementu (AffectsParentArrange, AffectsParentMeasure). Niektóre przykłady, w których te flagi są domyślnie ustawione, to FixedPage.Left i Paragraph.KeepWithNext.

  • Inherits. Domyślnie właściwości zależności nie dziedziczą wartości. OverridesInheritanceBehavior umożliwia również przechodzenie ścieżki dziedziczenia do drzewa wizualnego, co jest niezbędne w przypadku niektórych scenariuszy tworzenia kontrolek.

    Uwaga

    Termin "dziedziczy" w kontekście wartości właściwości oznacza coś specyficznego dla właściwości zależności; Oznacza to, że elementy podrzędne mogą dziedziczyć rzeczywistą wartość właściwości zależności od elementów nadrzędnych z powodu możliwości na poziomie struktury WPF systemu właściwości WPF. Nie ma to nic wspólnego bezpośrednio z typem kodu zarządzanego i dziedziczeniem składowych za pośrednictwem typów pochodnych. Aby uzyskać szczegółowe informacje, zobacz Dziedziczenie wartości właściwości.

  • Właściwości powiązania danych raportowania (IsNotDataBindable, BindsTwoWayByDefault). Domyślnie właściwości zależności w strukturze obsługują powiązanie danych z zachowaniem powiązania jednokierunkowego. Powiązanie danych można wyłączyć, jeśli nie było żadnego scenariusza (ponieważ mają one być elastyczne i rozszerzalne, nie ma wielu przykładów takich właściwości w domyślnych interfejsach API WPF). Ustawienie powiązania może mieć dwukierunkową wartość domyślną dla właściwości, które łączą zachowania kontrolki między elementami składników (IsSubmenuOpen jest przykładem) lub gdzie powiązanie dwukierunkowe jest typowym i oczekiwanym scenariuszem dla użytkowników (Text jest przykładem). Zmiana metadanych powiązanych z powiązaniem danych ma wpływ tylko na wartość domyślną; w zależności od tego, czy ustawienie domyślne zawsze można zmienić. Aby uzyskać szczegółowe informacje na temat trybów powiązań i powiązań w ogóle, zobacz Omówienie powiązania danych.

  • Raportowanie, czy właściwości powinny być dziennikowane przez aplikacje lub usługi, które obsługują dzienniki (Journal). W przypadku elementów ogólnych dziennik nie jest domyślnie włączony, ale jest on selektywnie włączony dla niektórych kontrolek danych wejściowych użytkownika. Ta właściwość ma być odczytywana przez usługi rejestrowania, w tym implementację dziennika WPF, i jest zwykle ustawiana na kontrolkach użytkownika, takich jak wybory użytkowników na listach, które powinny być utrwalane w krokach nawigacji. Aby uzyskać informacje na temat dziennika, zobacz Omówienie nawigacji.

Reading FrameworkPropertyMetadata

Każda z właściwości połączonych powyżej to konkretne właściwości, które FrameworkPropertyMetadata dodaje do swojej natychmiastowej klasy UIPropertyMetadatabazowej . Każda z tych właściwości będzie false domyślnie. Żądanie metadanych dla właściwości, w której znajomość wartości tych właściwości jest ważna, powinna podjąć próbę rzutowania zwróconych metadanych na FrameworkPropertyMetadata, a następnie sprawdzić wartości poszczególnych właściwości zgodnie z potrzebami.

Określanie metadanych

Podczas tworzenia nowego wystąpienia metadanych do celów stosowania metadanych do nowej rejestracji właściwości zależności można wybrać klasę metadanych do użycia: podstawową PropertyMetadata lub inną klasę pochodną, taką jak FrameworkPropertyMetadata. Ogólnie rzecz biorąc, należy użyć funkcji FrameworkPropertyMetadata, szczególnie jeśli właściwość ma jakąkolwiek interakcję z systemem właściwości i funkcjami WPF, takimi jak układ i powiązanie danych. Inną opcją bardziej zaawansowanych scenariuszy jest utworzenie FrameworkPropertyMetadata własnej klasy raportowania metadanych z dodatkowymi informacjami przenoszonymi w jego składowych. Możesz też użyć PropertyMetadata funkcji lub UIPropertyMetadata przekazać stopień obsługi funkcji implementacji.

W przypadku istniejących właściwości (AddOwner lub OverrideMetadata wywołania) należy zawsze zastąpić typ metadanych używany przez oryginalną rejestrację.

Jeśli tworzysz FrameworkPropertyMetadata wystąpienie, istnieją dwa sposoby wypełniania tych metadanych wartościami dla określonych właściwości, które komunikują cechy właściwości struktury:

  1. Użyj podpisu konstruktora FrameworkPropertyMetadata , który zezwala na flags parametr. Ten parametr powinien być wypełniony wszystkimi żądanymi połączonymi wartościami FrameworkPropertyMetadataOptions flag wyliczenia.

  2. Użyj jednego z podpisów bez parametru flags , a następnie ustaw dla każdej właściwości logicznej raportowania wartość FrameworkPropertyMetadata na true dla każdej żądanej zmiany charakterystyki. Jeśli to zrobisz, należy ustawić te właściwości przed skonstruowaniem wszystkich elementów z tą właściwością zależności; Właściwości logiczne są odczytywane i zapisywane w celu umożliwienia tego zachowania, aby uniknąć parametru flags i nadal wypełniać metadane, ale metadane muszą zostać skutecznie zapieczętowane przed użyciem właściwości. W związku z tym próba ustawienia właściwości po zażądaniu metadanych będzie nieprawidłową operacją.

Zachowanie scalania metadanych właściwości struktury

Po zastąpieniu metadanych właściwości struktury różne właściwości metadanych są scalane lub zastępowane.

To zachowanie jest implementowane przez Mergeprogram i może zostać zastąpione w klasach pochodnych metadanych.

Zobacz też