FrameworkElement.MeasureOverride(Size) Método

Definição

Fornece o comportamento para a passagem "Measure" do ciclo de layout. As classes podem substituir esse método para definir seu próprio comportamento de passagem de "Medida".

protected:
 virtual Size MeasureOverride(Size availableSize) = MeasureOverride;
Size MeasureOverride(Size const& availableSize);
protected virtual Size MeasureOverride(Size availableSize);
function measureOverride(availableSize)
Protected Overridable Function MeasureOverride (availableSize As Size) As Size

Parâmetros

availableSize
Size

O tamanho disponível que esse objeto pode dar a objetos filho. Infinito pode ser especificado como um valor para indicar que o objeto será dimensionado para qualquer conteúdo disponível.

Retornos

O tamanho que este objeto determina que precisa durante o layout, com base em seus cálculos dos tamanhos alocados para objetos filho ou com base em outras considerações, como um tamanho de contêiner fixo.

Exemplos

Este exemplo implementa MeasureOverride para personalizar a lógica de passagem "Measure" para uma implementação de painel personalizado. Observe, em particular, estes aspectos do código:

  • Itera sobre crianças.
  • Para cada filho, chama Measure, usando um Size que faz sentido com base em como a lógica do painel trata o número de filhos e seu próprio limite de tamanho conhecido.
  • Retorna seu tamanho (nesse caso, esse painel simples retorna um tamanho fixo em vez de um tamanho calculado ao acumular as medidas).
// First measure all children and return available size of panel
protected override Size MeasureOverride(Size availableSize)
{

    // Measure first 9 children giving them space up to 100x100, remaining children get 0x0 
    int i = 0;
    foreach (FrameworkElement child in Children)
    {
        if (i < 9)
        {
            child.Measure(new Size(100, 100));
        }
        else
        {
            child.Measure(new Size(0, 0));
        }

        i++;
    }


    // return the size available to the whole panel, which is 300x300
    return new Size(300, 300);
}
'First measure all children and return available size of panel 
Protected Overrides Function MeasureOverride(ByVal availableSize As Size) As Size
    'Measure first 9 children giving them space up to 100x100, remaining children get 0x0 
    Dim i As Integer = 0
    For Each child As FrameworkElement In Children
        If i < 9 Then
            child.Measure(New Size(100, 100))
        Else
            child.Measure(New Size(0, 0))
        End If
        i += 1
    Next
    'return the size available to the whole panel, which is 300x300 
    Return New Size(300, 300)
End Function

Comentários

Esse método tem uma implementação padrão que executa o layout interno para a maioria das classes derivadas de FrameworkElement . MeasureOverride fornece o comportamento de Measure, sempre que Measure é chamado pela lógica de layout interno ou pelo código do seu próprio aplicativo, incluindo quaisquer métodos MeasureOverride próprios para outras classes. Se você estiver produzindo um controle de modelo, a lógica MeasureOverride definirá a lógica de layout de passagem "Medida" específica do controle.

O design geral de como os elementos passam por um processo de layout quando o aplicativo é executado é dividido em duas etapas: uma passagem de "Medida" e, em seguida, uma passagem "Organizar". Os autores de controle (ou autores de painel) que desejam personalizar a passagem "Measure" do processamento de layout devem substituir MeasureOverride. Sua implementação deve fazer o seguinte:

  • Itere a coleção específica de objetos filho da classe que fazem parte do layout e chame Measure em cada objeto filho.
  • Obtenha Imediatamente DesiredSize em cada filho (isso é definido como uma propriedade depois que Measure é chamado).
  • Compute o tamanho líquido desejado do pai, com base na medida em execução do tamanho necessário para objetos filho. O valor retornado de MeasureOverride deve ser o tamanho desejado do objeto, que se torna a entrada Measure para o pai do objeto atual. Esse mesmo processo continua pelo sistema de layout até que a raiz da árvore de página/objeto seja atingida. Durante esse processo, os objetos filho podem retornar um tamanho DesiredSize maior do que o availableSize inicial para indicar que o objeto filho deseja mais espaço. Isso pode ser tratado em sua própria implementação introduzindo uma região rolável, redimensionando o controle pai, estabelecendo alguma maneira de ordem empilhada ou qualquer número de soluções para medir ou organizar conteúdo que possa variar dependendo da funcionalidade pretendida do contêiner de layout.

Aplica-se a

Confira também