Partilhar via


UIElement.Measure(Size) Método

Definição

Atualizações o DesiredSize de um UIElement. Normalmente, objetos que implementam layout personalizado para seus filhos de layout chamam esse método de suas próprias implementações MeasureOverride para formar uma atualização de layout recursiva.

public:
 virtual void Measure(Size availableSize) = Measure;
void Measure(Size const& availableSize);
public void Measure(Size availableSize);
function measure(availableSize)
Public Sub Measure (availableSize As Size)

Parâmetros

availableSize
Size

O espaço disponível que um pai pode alocar a um objeto filho. Um objeto filho pode solicitar um espaço maior do que o que está disponível; o tamanho fornecido poderá ser acomodado se a rolagem ou outro comportamento de redimensionamento for possível nesse contêiner específico.

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

A chamada Measure atinge potencialmente uma implementação MeasureOverride dessa classe específica. Caso contrário, a maioria das classes FrameworkElement tem um comportamento de layout padrão implícito para Measure.

availableSize pode ser qualquer número de zero a infinito. Os elementos que participam do layout devem retornar o Tamanho mínimo necessário para um determinado availableSize.

A computação do posicionamento inicial do layout em uma interface do usuário XAML consiste em uma chamada measure e uma chamada Arrange , nessa ordem. Durante a chamada Measure, o sistema de layout determina os requisitos de tamanho de um elemento usando a medida availableSize . Durante a chamada Organizar , o sistema de layout finaliza o tamanho e a posição da caixa delimitadora de um elemento.

Quando um layout é produzido pela primeira vez, ele sempre tem uma chamada measure que acontece antes de Arrange. No entanto, após a primeira passagem de layout, uma chamada Arrange pode ocorrer sem uma Medida antes dela. Isso pode acontecer quando uma propriedade que afeta apenas Arrange é alterada (como alinhamento) ou quando o pai recebe um Arrange sem uma Medida.

Uma chamada de Medida invalidará automaticamente qualquer informação de Organização . As atualizações de layout geralmente ocorrem de forma assíncrona (em um momento determinado pelo sistema de layout). Um elemento pode não refletir imediatamente as alterações nas propriedades que afetam o dimensionamento do elemento (como Width).

Aplica-se a

Confira também