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 opětovném vyhodnocení hodnoty vlastnosti závislosti nebo je výslovně požadováno převod.
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í systém vlastností předá tuto hodnotu.
- baseValue
- Object
Nová hodnota vlastnosti před jakýmkoli pokusem o převod.
Návratová hodnota
Přetěžovaná hodnota (s odpovídajícím typem).
Příklady
Následující příklad obsahuje implementaci tohoto zpětného volání pro převod uložené hodnoty vlastnosti závislosti na základě jiných vstupů, jako je hodnota jiné vlastnosti. V tomto případě zpětné volání zkontroluje, jestli ShirtType vlastnost odpovídá typu košile, která obsahuje tlačítka. Pokud ano, vytvoří výchozí barvu pro ButtonColortyp košile , pokud typ košile nemá žádná tlačítka, převede ButtonColor hodnotu zpět na počáteční hodnotu, což způsobí, že uživatelské rozhraní (není zobrazeno) odebere tento rozevírací seznam z efektivní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í založená na CoerceValueCallback vlastnosti závislosti lze přiřadit několika různými technikami. Každá z těchto technik vyžaduje, abyste nejprve vytvořili nový objekt metadat vlastností (PropertyMetadatanebo odvozenou třídu, například FrameworkPropertyMetadata). Vytvořte objekt metadat pomocí podpisu konstruktoru coerceValueCallback , který přebírá 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 vložením metadat do použití.
Pokud máte tato metadata, můžete:
Definujte novou vlastnost závislosti na nové třídě pomocí některého Registerpodpisu , který poskytuje metadata jako
typeMetadatahodnotu.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ávislosti 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 baseValue a určit na základě hodnoty nebo typu, zda se jedná o hodnotu, kterou je potřeba dále převést.
Vlastnost CoerceValueCallback závislosti se vyvolá pokaždé, když systém vlastností nebo jakýkoli jiný volající volá CoerceValue instanci DependencyObject , která určuje identifikátor této vlastnosti jako dphodnotu .
Změny hodnoty vlastnosti mohly pocházet od libovolného možného účastníka v systému vlastností. To zahrnuje styly, obecnou neplatnou platnost, triggery, dědičnost hodnot vlastností a nastavení místní hodnoty.
Obecně byste se měli vyhnout zadání více než jedné pro libovolnou CoerceValueCallback vlastnost závislosti (přepsání nebo přidání s novými metadaty pro vlastnost závislosti, která již měla CoerceValueCallback). Bude moct jednat pouze jeden z zpětných volání. Volající zpětné volání bude ten, který byl použit u nejvíce odvozené třídy v dědičnosti ve srovnání s volajícím DependencyObject . Další zpětná volání přiřazená metadatům pro vlastnost závislosti, protože existovala v hierarchii vlastníka vyšší, se nahradí při přepsání metadat.
Metody rozšíření
| Name | Description |
|---|---|
| GetMethodInfo(Delegate) |
Získá objekt, který představuje metodu reprezentovanou zadaným delegátem. |