Partilhar via


DependencyProperty.UnsetValue Propriedade

Definição

Especifica um valor estático que é usado pelo sistema de propriedades em vez de nulo para indicar que a propriedade existe, mas não tem seu valor definido pelo sistema de propriedades ou por qualquer código de aplicativo.

public:
 static property Platform::Object ^ UnsetValue { Platform::Object ^ get(); };
static IInspectable UnsetValue();
public static object UnsetValue { get; }
var object = DependencyProperty.unsetValue;
Public Shared ReadOnly Property UnsetValue As Object

Valor da propriedade

Object

Platform::Object

IInspectable

O valor sentinela de um valor não conjunto.

Exemplos

Este exemplo verifica se há um valor local existente com ReadLocalValue. Se houver um valor local, conforme indicado por não retornar UnsetValue, o valor local existente será removido chamando ClearValue.

public static bool ClearSetProperty(DependencyObject targetObject, DependencyProperty targetDP)
{
    if (targetObject == null || targetDP == null)
    {
        throw new ArgumentNullException();
    }
    object localValue = targetObject.ReadLocalValue(targetDP);
    if (localValue == DependencyProperty.UnsetValue)
    {
        return false;
    }
    else
    {
        targetObject.ClearValue(targetDP);
        return true;
    }
}
Public Shared Function ClearSetProperty(targetObject As DependencyObject, targetDP As DependencyProperty) As Boolean
    If targetObject Is Nothing Or targetDP Is Nothing Then
        Throw New ArgumentNullException()
    End If
    Dim localValue As Object = targetObject.ReadLocalValue(targetDP)
    If localValue = DependencyProperty.UnsetValue Then
        ClearSetProperty = False
    Else
        targetObject.ClearValue(targetDP)
        ClearSetProperty = True
    End If
End Function

Comentários

UnsetValue é um valor sentinela usado para cenários em que o sistema de propriedades de dependência não consegue determinar um valor de propriedade de dependência solicitado. UnsetValue é usado em vez de nulo, pois nulo é um valor de propriedade válido para a maioria dos valores de tipo de referência e é um DefaultValue usado com frequência em metadados para uma propriedade de dependência.

UnsetValue nunca é retornado de uma chamada DependencyObject.GetValue . Quando você chama DependencyObject.GetValue para uma propriedade de dependência, uma dessas condições é sempre verdadeira:

  • Uma propriedade de dependência tem um valor padrão estabelecido em metadados e esse valor é retornado. Esse valor pode vir do DefaultValue dos metadados da propriedade. Isso pode ser nulo.
  • Algum outro valor foi estabelecido por meio de precedência de valor (por exemplo, um estilo foi aplicado ou uma Associação foi avaliada) e o valor padrão não é mais relevante. Embora especificamente definido, isso ainda pode ser nulo. Para obter mais informações sobre precedência de valor, consulte Visão geral das propriedades de dependência.

DependencyObject.ReadLocalValue retorna UnsetValue quando a propriedade solicitada não foi definida localmente.

Observação

Não registre uma propriedade de dependência com o valor padrão de UnsetValue. Isso será confuso para os consumidores de propriedades e terá consequências não intencionais dentro do sistema de propriedades.

UnsetValue deve ser retornado de uma implementação IValueConverter que fornece conversão em uma associação de dados para uma propriedade de dependência, em qualquer caso em que o conversor não consiga converter um valor de origem. Os conversores não devem gerar exceções para esse caso em IValueConverter.Convert, elas aparecerão como exceções em tempo de execução para as quais você precisaria adicionar tratamento em UnhandledException ou pior, mas aparecerão para os usuários como exceções reais em tempo de execução. As implementações do conversor devem seguir o padrão de associação geral de que qualquer associação com falha não faz nada e não fornece um valor, e UnsetValue em vez de null é o valor sentinela para esse caso que o mecanismo de associação entende. Para obter mais informações, consulte Vinculação de dados em detalhes.

Aplica-se a

Confira também