Metadane właściwości struktury (WPF .NET)
Opcje metadanych właściwości struktury dla właściwości zależności można ustawić na poziomie struktury Windows Presentation Foundation (WPF). Oznaczenie poziomu platformy WPF ma zastosowanie, gdy interfejsy API prezentacji WPF i pliki wykonywalne obsługują renderowanie i powiązanie danych. Interfejsy API prezentacji i pliki wykonywalne wysyłają zapytania do FrameworkPropertyMetadata właściwości zależności.
Wymagania wstępne
W tym artykule przyjęto założenie, że masz podstawową wiedzę na temat właściwości zależności i zapoznasz się z omówieniem właściwości zależności. Aby postępować zgodnie z przykładami w tym artykule, warto zapoznać się z językiem Extensible Application Markup Language (XAML) i wiedzieć, jak pisać aplikacje WPF.
Kategorie metadanych właściwości struktury
FrameworkPropertyMetadata należy do następujących kategorii:
Metadane wpływające na układ elementu, w szczególności AffectsArrangeflagi , AffectsMeasurei AffectsRender metadanych. Możesz ustawić te flagi, jeśli implementacja właściwości zależności ma wpływ na aspekt wizualny i implementujesz MeasureOverride lub ArrangeOverride w klasie. Metody
MeasureOverride
iArrangeOverride
zapewniają zachowanie specyficzne dla implementacji i renderowanie informacji do systemu układu. GdyAffectsArrange
właściwość ,AffectsMeasure
lubAffectsRender
jest ustawiona natrue
wartość w metadanych właściwości zależności i jej obowiązujące zmiany wartości, system właściwości WPF zainicjuje żądanie unieważnienia wizualizacji elementu w celu wyzwolenia ponownego wyrysowania.Metadane wpływające na układ elementu nadrzędnego elementu, w szczególności AffectsParentArrange flagi metadanych i AffectsParentMeasure . Przykłady właściwości zależności WPF, które ustawiają te flagi, to FixedPage.Left i Paragraph.KeepWithNext.
Metadane dziedziczenia wartości właściwości, w szczególności Inherits flagi metadanych i OverridesInheritanceBehavior . 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. Aby uzyskać więcej informacji, zobacz Dziedziczenie wartości właściwości.
Uwaga
Termin "dziedziczy" w kontekście wartości właściwości jest specyficzny dla właściwości zależności i nie odnosi się bezpośrednio do zarządzanych typów kodu i dziedziczenia składowych za pośrednictwem typów pochodnych. W kontekście właściwości zależności oznacza to, że elementy podrzędne mogą dziedziczyć wartości właściwości zależności od elementów nadrzędnych.
Metadane powiązania danych, w szczególności BindsTwoWayByDefault flagi metadanych i IsNotDataBindable . Domyślnie właściwości zależności w strukturze WPF obsługują powiązanie jednokierunkowe. Rozważ ustawienie powiązania dwukierunkowego jako domyślnego ustawienia właściwości, które zgłaszają stan i można modyfikować przez akcję użytkownika, na przykład IsSelected. Należy również rozważyć ustawienie powiązania dwukierunkowego jako domyślnego, gdy użytkownicy kontrolki oczekują jej zaimplementowania, na przykład TextBox.Text.
BindsTwoWayByDefault
Dotyczy tylko domyślnego trybu powiązania. Aby edytować kierunek przepływu danych powiązania, ustaw wartość Binding.Mode. Możesz użyćIsNotDataBindable
polecenia , aby wyłączyć powiązanie danych, gdy nie ma dla niego żadnego przypadku użycia. Aby uzyskać więcej informacji na temat powiązań danych, zobacz Omówienie powiązania danych.Rejestrowanie metadanych, w szczególności flaga Journal metadanych. Wartość domyślna flagi
Journal
dotyczy tylkotrue
niektórych właściwości zależności, takich jak SelectedIndex. Kontrolki danych wejściowych użytkownika powinny ustawiać flagęJournal
właściwości, których wartości przechowują wybory użytkowników, które muszą być przechowywane. FlagaJournal
jest odczytywana przez aplikacje lub usługi, które obsługują dzienniki, w tym usługi dziennika WPF. Aby uzyskać informacje na temat przechowywania kroków nawigacji, zobacz Omówienie nawigacji.
FrameworkPropertyMetadata element pochodzi bezpośrednio z UIPropertyMetadataelementu i implementuje flagi omówione tutaj. Jeśli nie zostanie ustawiona specjalnie, FrameworkPropertyMetadata
flagi mają wartość false
domyślną .
Reading FrameworkPropertyMetadata
Aby pobrać metadane dla właściwości zależności, wywołaj GetMetadata identyfikator DependencyProperty . Wywołanie GetMetadata
zwraca PropertyMetadata
obiekt. Jeśli musisz wykonać zapytanie dotyczące wartości metadanych platformy rzutowania PropertyMetadata
na FrameworkPropertyMetadatawartość .
Określanie elementu FrameworkPropertyMetadata
Podczas rejestrowania właściwości zależności możesz utworzyć i przypisać do niej metadane. Obiekt metadanych, który przypisujesz, może być PropertyMetadata lub jedną z jego klas pochodnych, takich jak FrameworkPropertyMetadata. Wybierz FrameworkPropertyMetadata
właściwości zależności, które opierają się na interfejsach API prezentacji WPF i plikach wykonywalnych na potrzeby renderowania i powiązania danych. Bardziej zaawansowaną opcją jest utworzenie FrameworkPropertyMetadata
niestandardowej klasy raportowania metadanych z większą pulą flag. Można też użyć UIPropertyMetadata właściwości innych niż struktury, które mają wpływ na renderowanie interfejsu użytkownika.
Mimo że opcje metadanych są zwykle ustawiane podczas rejestracji nowej właściwości zależności, można je ponownie określić w OverrideMetadata wywołaniach lub AddOwner . Podczas zastępowania metadanych zawsze przesłaniaj ten sam typ metadanych, który był używany podczas rejestracji właściwości.
Właściwości, które są narażone przez FrameworkPropertyMetadata
element, są czasami określane jako flagi. Jeśli tworzysz FrameworkPropertyMetadata
wystąpienie, istnieją dwa sposoby wypełniania wartości flagi:
Ustaw flagi na wystąpieniu FrameworkPropertyMetadataOptions typu wyliczenia.
FrameworkPropertyMetadataOptions
umożliwia określenie flag metadanych w bitowej kombinacji OR. Następnie utwórz wystąpienieFrameworkPropertyMetadata
przy użyciu konstruktora, który maFrameworkPropertyMetadataOptions
parametr i przekażFrameworkPropertyMetadataOptions
wystąpienie. Aby zmienić flagi metadanych po przekazaniuFrameworkPropertyMetadataOptions
do konstruktora FrameworkPropertyMetadata , zmień odpowiednią właściwość w nowymFrameworkPropertyMetadata
wystąpieniu. Jeśli na przykład ustawisz flagęFrameworkPropertyMetadataOptions.NotDataBindable, możesz ją cofnąć, ustawiając wartość FrameworkPropertyMetadata.IsNotDataBindable .false
FrameworkPropertyMetadata
Utwórz wystąpienie przy użyciu konstruktora, który nie ma parametruFrameworkPropertyMetadataOptions
, a następnie ustaw odpowiednie Boolean flagi na .FrameworkPropertyMetadata
Ustaw wartości flagi przed skojarzeniemFrameworkPropertyMetadata
wystąpienia z właściwością zależności. W przeciwnym razie otrzymasz wartość InvalidOperationException.
Zachowanie zastępowania metadanych
Po zastąpieniu metadanych właściwości struktury zmieniono wartości metadanych zamień lub zostały scalone z oryginalnymi wartościami:
W przypadku elementu PropertyChangedCallbackdomyślna logika scalania zachowuje poprzednie
PropertyChangedCallback
wartości w tabeli, a wszystkie są wywoływane przy zmianie właściwości. Kolejność wywołania zwrotnego jest określana przez głębokość klasy, gdzie wywołanie zwrotne zarejestrowane przez klasę bazową w hierarchii będzie uruchamiane jako pierwsze. Dziedziczone wywołania zwrotne są uruchamiane tylko raz i są własnością klasy, która dodała je do metadanych.W przypadku DefaultValueelementu nowa wartość zastąpi istniejącą wartość domyślną. Jeśli nie określisz
DefaultValue
elementu w przesłonięć metadanych i jeśli istniejący FrameworkPropertyMetadata ma ustawionąInherits
flagę, wartość domyślna pochodzi z najbliższego obiektu nadrzędnego określonegoDefaultValue
w metadanych.W przypadku elementu CoerceValueCallbacknowa wartość zastąpi istniejącą
CoerceValueCallback
wartość. Jeśli nie określiszCoerceValueCallback
elementu w metadanych przesłonięcia, wartość pochodzi z najbliższego przodka w łańcuchu dziedziczenia, który określiłCoerceValueCallback
element .W przypadku
FrameworkPropertyMetadata
flag nie dziedziczynych można zastąpić wartość domyślnąfalse
wartością.true
Można jednak zastąpićtrue
tylko wartość wartościąfalse
dla Inheritswartości , Journal, OverridesInheritanceBehaviori SubPropertiesDoNotAffectRender.
Uwaga
Domyślna logika scalania jest implementowana przez metodę Merge . Niestandardową logikę scalania można określić w klasie pochodnej, która dziedziczy właściwość zależności, przesłaniając Merge
ją w tej klasie.
Zobacz też
.NET Desktop feedback