FrameworkElement.MeasureOverride(Size) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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.