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 "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.