FrameworkElement.MeasureOverride(Size) Método

Definição

Fornece o comportamento para a passagem "Medida" do ciclo de layout. As classes podem substituir esse método para definir seu próprio comportamento de passagem "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 esse objeto determina 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 "Medida" 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 Tamanho 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 na acumulação das 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);
}

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 Medida, sempre que Measure é chamado pela lógica de layout interno ou pelo código do seu próprio aplicativo, incluindo quaisquer MeasureOverride métodos próprios para outras classes. Se você estiver produzindo um controle modelo, a lógica definirá a MeasureOverride 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 "Medida" e, em seguida, uma passagem "Organizar". Os autores de controle (ou autores de painel) que desejam personalizar a passagem "Medida" do processamento de layout devem substituir MeasureOverride. Sua implementação deve fazer o seguinte:

  • Iterar a coleção específica de objetos filho da classe que fazem parte do layout e chamar Measure em cada objeto filho.
  • Obtenha Imediatamente DesiredSize em cada filho (isso é definido como uma propriedade após Measure ser 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 próprio tamanho desejado do objeto, que se torna a entrada Measure para o pai do objeto atual. Esse mesmo processo continua por meio do 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