Domanda

Ho problemi a capire quando viene invocato il metodo onRender. Considera il mio esempio: Ho una classe che ne deriva da frammentlement che sovrascrive il metodo onRender. Supponiamo di avere un Grid grid.Quello che mi aspetterei è quello

var someElement = new SomeElement();
grid.AddVisualChild(someElement);
someElement.InvalidateVisual();
.

causerebbe il metodo di séelement.onrending da innescare.Non è nel mio caso, ma il seguente è:

var someElement = new SomeElement();
grid.Children.Add(new SomeElement());
someElement.InvalidateVisual();
.

Quindi la mia domanda è il motivo per cui someElement non è disegnato quando è aggiunto esclusivamente all'albero visivo.Qual è l'importanza di aggiungerlo alla proprietà Children? E più in generale, cosa ha chiamato onRender?Tramite l'albero visivo o la proprietà Children, o?

È stato utile?

Soluzione

AddvisualChild non sta facendo ciò che potresti pensare è.

AddvisualChild è lì solo per creare una relazione madre-genitore tra due immagini in Visualtree. Niente di più o meno. Visualtree non rende tutto ciò che è dentro di esso.

Addlogalchild fa lo stesso solo che crea logico. Logaltree è solitamente più piccolo e più corto di Visualtree, il che significa che è più veloce.

Per supportare completamente il rendering dei tuoi figli, è necessario chiamare il metodo di misura su di loro e organizzare il metodo. Fullemore, è necessario modificare la proprietà di VisualChildrenCount del tuo genitore e di passare la dimensione giusta a ciascun figlio e devi posizionarle sulla posizione corretta per l'utente per poterli vedere. Quindi le cose verranno resi.

Chiamare AddvisualChild da solo e invalidatoVisual non sta facendo nulla.

Collezione per bambini, d'altra parte, è un'umelementCollezione che fa tutte le cose sopra riportate automaticamente. Questo è il motivo per cui lavora con bambini.Aggiungere (...).

Verthermore, dovresti sempre lavorare con la collezione per bambini invece di scrivere le tue cose.

Come Highcore ha menzionato molti problemi può essere risolto semplicemente avendo un corretto MVVM.

Forse non è necessario avere un controllo personalizzato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top