UIElement.MeasureCore(Size) Método

Definição

Quando substituído em uma classe derivada, fornece uma lógica de medida para o dimensionamento correto desse elemento, levando em consideração o tamanho do conteúdo de elementos filho.

protected:
 virtual System::Windows::Size MeasureCore(System::Windows::Size availableSize);
protected virtual System.Windows.Size MeasureCore (System.Windows.Size availableSize);
abstract member MeasureCore : System.Windows.Size -> System.Windows.Size
override this.MeasureCore : System.Windows.Size -> System.Windows.Size
Protected Overridable Function MeasureCore (availableSize As Size) As Size

Parâmetros

availableSize
Size

O tamanho disponível que o elemento pai pode alocar para o filho.

Retornos

O tamanho desejado desse elemento no layout.

Exemplos

Uma substituição típica de MeasureCore segue esse padrão aproximado (não há uma coleção interna chamada VisualChildren; VisualChildren é um espaço reservado que representa qualquer coleção filho que seu elemento mantém).

protected override Size MeasureCore(Size availableSize)
{
    foreach (UIElement child in VisualChildren)
    {
        child.Measure(availableSize);
        // call some method on child that adjusts child size if needed
        _cache.StoreInfoAboutChild(child);
    }
    Size desired = CalculateBasedOnCache(_cache);
    return desired;
}
Protected Overrides Function MeasureCore(ByVal availableSize As Size) As Size
    For Each child As UIElement In VisualChildren
        child.Measure(availableSize)
        ' call some method on child that adjusts child size if needed
        _cache.StoreInfoAboutChild(child)
    Next child
    Dim desired As Size = CalculateBasedOnCache(_cache)
    Return desired
End Function
  • Você deve chamar Measure em cada elemento filho.

  • Em geral, sua implementação deve armazenar em cache as informações de medida entre as chamadas de MeasureCore método e ArrangeCore no mesmo elemento.

  • A chamada de implementações base de MeasureCore não é necessária, mas pode ser apropriada se a implementação base fornecer uma funcionalidade de layout desejada.

  • As chamadas para Measure em elementos filho devem passar o mesmo availableSize que o pai ou um subconjunto da área, dependendo do tipo de layout compatível com o elemento pai. Por exemplo, seria válido remover a área para uma borda ou preenchimento específico do elemento, uma barra de rolagem ou um controle personalizado.

Comentários

É mais comum derivar um elemento de em vez UIElementde FrameworkElement . Se você estiver derivando de FrameworkElement, observe que uma substituição de MeasureCore em FrameworkElement sela o MeasureCore método . Portanto, você só substituirá MeasureCore como um meio de alterar as características da medida de layout se você derivar de por meio de UIElement uma herança que não inclui FrameworkElement. Esse pode ser o caso se você estiver tentando criar sua própria implementação no nível de núcleo do WPF. Caso contrário, se você estiver derivando de , o modelo de FrameworkElementimplementação para Comportamento de medida será a FrameworkElement implementação de .MeasureOverride.

Um elemento pai com elementos filho deve chamar Measure em cada filho, caso contrário, esses elementos filho não são dimensionados ou organizados e desaparecerão efetivamente do layout.

Notas aos Herdeiros

As implementações devem ser capazes de processar um valor fornecido para availableSize que seja infinito. Um valor infinito indica nenhuma restrição solicitada e efetivamente adia a escolha de medida para o elemento pai por meio de chamadas de Medida recursivas.

As implementações podem considerar o valor fornecido para availableSize ser uma restrição flexível. O elemento filho pode especificar um tamanho maior, mesmo que outros aspectos do código do aplicativo tenham sido capazes de determinar o tamanho real atual do elemento pai. A solicitação de tamanho grande é uma convenção que indica que o elemento filho está consultando se o elemento pai pode dar suporte à rolagem de conteúdo dentro de uma região de exibição de conteúdo.

Aplica-se a