UIElement.Measure(Size) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Aggiornamenti desiredSize di un oggetto UIElement. In genere, gli oggetti che implementano il layout personalizzato per i relativi elementi figlio di layout chiamano questo metodo dalle proprie implementazioni di MeasureOverride per formare un aggiornamento del layout ricorsivo.
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)
Parametri
- availableSize
- Size
Spazio disponibile che un padre può allocare a un oggetto figlio. Un oggetto figlio può richiedere uno spazio maggiore di quello disponibile; la dimensione specificata può essere adattata se lo scorrimento o un altro comportamento di ridimensionamento è possibile in quel particolare 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
La chiamata Measure raggiunge potenzialmente un'implementazione MeasureOverride di tale classe specifica. In caso contrario, la maggior parte delle classi FrameworkElement ha un comportamento di layout predefinito implicito per Measure.
availableSize può essere qualsiasi numero compreso tra zero e infinito. Gli elementi che fanno parte del layout devono restituire la dimensione minima richiesta per un valore availableSize specificato.
Il calcolo del posizionamento iniziale del layout in un'interfaccia utente XAML è costituito da una chiamata Measure e da una chiamata Arrange , in tale ordine. Durante la chiamata a Measure, il sistema di layout determina i requisiti di dimensione di un elemento usando la misura availableSize . Durante la chiamata Arrange , il sistema di layout finalizza le dimensioni e la posizione del rettangolo di selezione di un elemento.
Quando un layout viene prodotto per la prima volta, ha sempre una chiamata Measure che viene eseguita prima di Arrange. Tuttavia, dopo il passaggio del primo layout, una chiamata Arrange può essere eseguita senza una misura precedente. Ciò può verificarsi quando viene modificata una proprietà che influisce solo su Arrange (ad esempio l'allineamento) o quando l'elemento padre riceve un oggetto Arrange senza una misura.
Una chiamata di misura invaliderà automaticamente tutte le informazioni di disposizione . Gli aggiornamenti del layout vengono in genere eseguiti in modo asincrono (alla volta determinati dal sistema di layout). Un elemento potrebbe non riflettere immediatamente le modifiche apportate alle proprietà che influiscono sul ridimensionamento degli elementi, ad esempio Width.