CoerceValueCallback Delegát
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Poskytuje šablonu pro metodu, která je volána při každém přehodnocování hodnoty vlastnosti závislosti nebo je výslovně požadováno donucování.
public delegate System::Object ^ CoerceValueCallback(DependencyObject ^ d, System::Object ^ baseValue);
public delegate object CoerceValueCallback(DependencyObject d, object baseValue);
type CoerceValueCallback = delegate of DependencyObject * obj -> obj
Public Delegate Function CoerceValueCallback(d As DependencyObject, baseValue As Object) As Object
Parametry
Objekt, na který vlastnost existuje. Při vyvolání zpětného volání předá systém vlastností tuto hodnotu.
- baseValue
- Object
Nová hodnota vlastnosti před jakýmkoli pokusem o převod.
Návratová hodnota
Vysouzená hodnota (s odpovídajícím typem).
Příklady
Následující příklad obsahuje implementaci tohoto zpětného volání k vysouvání uložené hodnoty vlastnosti závislosti na základě jiných vstupů, jako je například hodnota jiné vlastnosti. V tomto případě zpětné volání zkontroluje, jestli ShirtType
vlastnost odpovídá typu košile s tlačítky. Pokud ano, vytvoří výchozí počáteční barvu pro ButtonColor
, pokud typ košile nemá tlačítka, ButtonColor
převede hodnotu zpět na počáteční hodnotu, což způsobí, že uživatelské rozhraní (nezobrazuje se) odebere tuto rozevírací nabídku z platných voleb.
private static object CoerceButtonColor(DependencyObject d, object value)
{
ShirtTypes newShirtType = (d as Shirt).ShirtType;
if (newShirtType == ShirtTypes.Dress || newShirtType == ShirtTypes.Bowling)
{
return ButtonColors.Black;
}
return ButtonColors.None;
}
Private Shared Function CoerceButtonColor(ByVal d As DependencyObject, ByVal value As Object) As Object
Dim newShirtType As ShirtTypes = (TryCast(d, Shirt)).ShirtType
If newShirtType = ShirtTypes.Dress OrElse newShirtType = ShirtTypes.Bowling Then
Return ButtonColors.Black
End If
Return ButtonColors.None
End Function
Poznámky
Zpětná volání na CoerceValueCallback základě lze přiřadit vlastnosti závislosti pomocí několika různých technik. Každá z těchto technik vyžaduje, abyste nejprve vytvořili nový objekt metadat vlastnosti (PropertyMetadatanebo odvozenou třídu, například FrameworkPropertyMetadata). Vytvořte objekt metadat pomocí podpisu konstruktoru coerceValueCallback
, který převezme parametr, a přiřaďte tento parametr obslužné rutině zpětného volání. Nebo vytvořte metadata libovolným podpisem a nastavte CoerceValueCallback vlastnost před uvedením metadat do provozu.
Pokud máte tato metadata, můžete:
Definujte novou vlastnost závislosti na nové třídě pomocí libovolného Registerpodpisu , který jako hodnotu poskytne metadata
typeMetadata
.Přepište metadata (volání OverrideMetadata(Type, PropertyMetadata)) pro existující vlastnost závislosti, pokud je odvozena z třídy, která vlastní vlastnost závislosti.
Přidejte existující vlastnost závislostí do nové DependencyObject třídy pomocí nových metadat voláním AddOwner(Type, PropertyMetadata).
Implementace tohoto zpětného volání by měly zkontrolovat hodnotu v baseValue
a určit na základě hodnoty nebo typu, zda se jedná o hodnotu, kterou je potřeba dále vysouvat.
Vlastnost CoerceValueCallback pro závislost je vyvolána kdykoliv, když systém vlastností nebo jakýkoli jiný volající volá CoerceValue instanci DependencyObject , a určuje identifikátor této vlastnosti jako dp
.
Změny hodnoty vlastnosti mohly pocházet od libovolného možného účastníka v systému vlastností. Patří sem styly, obecná zneplatnění, triggery, dědičnost hodnot vlastností a nastavení místní hodnoty.
Obecně byste se měli vyhnout zadání více než jednoho CoerceValueCallback pro libovolnou vlastnost závislosti (přepsání nebo přidání s novými metadaty pro vlastnost závislosti, která již měla CoerceValueCallback). Jednat bude moci pouze jedno ze zpětných volání. Působící zpětné volání bude ten, který byl použit pro nejvíce odvozenou třídu v dědičnosti ve srovnání s DependencyObject volajícím. Další zpětná volání přiřazená metadatům vlastnosti závislosti, protože v hierarchii vlastníka existovala výše, se při přepsání metadat nahradí.
Metody rozšíření
GetMethodInfo(Delegate) |
Získá objekt, který představuje metodu reprezentovanou zadaným delegátem. |