Condividi tramite


FrameworkElement.MeasureOverride(Size) Metodo

Definizione

Fornisce il comportamento per il passaggio "Misura" del ciclo di layout. Le classi possono eseguire l'override di questo metodo per definire il proprio comportamento di passaggio "Measure".

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

Parametri

availableSize
Size

Dimensione disponibile che questo oggetto può assegnare agli oggetti figlio. Infinity può essere specificato come valore per indicare che l'oggetto verrà ridimensionato a qualsiasi contenuto disponibile.

Restituisce

Le dimensioni di questo oggetto ne determinano le esigenze durante il layout, in base ai calcoli delle dimensioni allocate per gli oggetti figlio o in base ad altre considerazioni, ad esempio le dimensioni fisse del contenitore.

Esempio

Questo esempio implementa MeasureOverride per personalizzare la logica di passaggio "Measure" per un'implementazione personalizzata del pannello. Si noti in particolare questi aspetti del codice:

  • Scorre i bambini.
  • Per ogni elemento figlio chiama Measure, usando un valore Size che ha senso in base al modo in cui la logica del pannello gestisce il numero di elementi figlio e il proprio limite di dimensioni note.
  • Restituisce le dimensioni (in questo caso, questo pannello semplice restituisce una dimensione fissa anziché una dimensione calcolata per l'accumulo delle misurazioni).
// 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

Commenti

Questo metodo ha un'implementazione predefinita che esegue il layout predefinito per la maggior parte delle classi derivate di FrameworkElement . MeasureOverride fornisce il comportamento per Measure, ogni volta che Measure viene chiamato dalla logica di layout interno o dal codice dell'app, inclusi i metodi MeasureOverride personalizzati per altre classi. Se si produce un controllo basato su modelli, la logica measureOverride definisce la logica di layout del passaggio "Measure" specifica del controllo.

La progettazione generale del modo in cui gli elementi passano attraverso un processo di layout quando l'app viene eseguita è divisa in due passaggi: un passaggio "Misura" e quindi un passaggio "Disponi". Gli autori di controlli (o autori di pannelli) che vogliono personalizzare il passaggio "Misura" dell'elaborazione del layout devono eseguire l'override di MeasureOverride. L'implementazione deve eseguire le operazioni seguenti:

  • Eseguire l'iterazione della raccolta specifica della classe di oggetti figlio che fanno parte del layout e chiamare Measure per ogni oggetto figlio.
  • Ottenere immediatamente DesiredSize su ogni elemento figlio (questa proprietà viene impostata come proprietà dopo la chiamata a Measure ).
  • Calcolare le dimensioni nette desiderate dell'elemento padre, in base alla misurazione in esecuzione delle dimensioni necessarie per gli oggetti figlio. Il valore restituito di MeasureOverride deve essere la dimensione desiderata dell'oggetto, che diventa quindi l'input Measure per l'elemento padre dell'oggetto corrente. Lo stesso processo continua attraverso il sistema di layout fino a quando non viene raggiunta la radice dell'albero di pagine/oggetti. Durante questo processo, gli oggetti figlio potrebbero restituire una dimensione DesiredSize maggiore rispetto a quella disponibile iniziale per indicare che l'oggetto figlio desidera più spazio. Questa operazione può essere gestita nella propria implementazione introducendo un'area scorrevole, ridimensionando il controllo padre, stabilendo una modalità di ordine in pila o qualsiasi numero di soluzioni per la misurazione o la disposizione del contenuto che può variare a seconda della funzionalità prevista del contenitore di layout.

Si applica a

Vedi anche