Domanda

Ho un controllo utente WPF che si lega a un DataTable e genera CheckBox e un EditBox mascherato per ogni riga in un DataTable . Ho diversi esempi di questo controllo sul mio modulo. Il numero totale di CheckBox da generare è superiore a 200. Vedo alcuni problemi di prestazioni di rendering. Il modulo viene caricato immediatamente con tutti i controlli statici (caselle di testo, menu a discesa), quindi alcuni secondi dopo vengono visualizzati i CheckBox .

Qualche idea?

Grazie

È stato utile?

Soluzione

A meno che tutti i 200 elementi non siano visibili sullo schermo, dovresti usare una sorta di layout virtuale che crea l'albero visivo solo per gli oggetti visibili. Ciò migliorerà notevolmente le tue prestazioni.

Altri suggerimenti

Cosa sta generando " " le caselle di controllo? Dovresti usare un ItemsControl (o sottoclasse) e associare i dati che rappresentano le caselle di controllo. Supponendo che lo stai facendo, allora quello che vuoi fare è far sì che ItemsControl utilizzi " virtualizzazione " applicando la proprietà VirtualizingStackPanel.IsVirtualizing a ItemsControl in questo modo:

<ItemsControl VirtualizingStackPanel.IsVirtualizing="true" ... >

Potresti anche voler attivare " riciclaggio dei contenitori " che aiuterà anche le prestazioni. Questo viene fatto anche con una proprietà collegata:

<ItemsControl VirtualizingStackPanel.VirtualizationMode="Recycling" ... >

Troppe caselle di controllo sicuramente costano molto, se si guardano i modelli di controlli di base, sono anche pieni di molti elementi.

Suggerirei se puoi dividere la tua UI in Tab o Accordins che causeranno oggetti meno visibili su uno schermo e aiuteranno l'utente a navigare facilmente e velocemente anche verso gli oggetti.

VirtualizingStackPanel sarà di aiuto, ma se l'associazione non è corretta, si potrebbero ottenere risultati non previsti.

  1. Modello di controllo personalizzato: Puoi anche creare il tuo modello di casella di controllo personalizzato con almeno UIElement, come un semplice rettangolo riempito di colore diverso sul trigger della proprietà IsChecked. Ciò eliminerà alcune animazioni ecc. Che possono sicuramente migliorare le prestazioni di rendering. Credo che CheckBox sia meno importante quando si tratta di animare l'interfaccia utente.

  2. Quando sei sicuro di utilizzare " Testo " come contenuto, quindi crea semplicemente un modello con rettangolo per mostrare il valore riempito / vuoto e inserisci TextBlock con il modello che si lega al contenuto.

  3. Prova a dare larghezza / altezza fisse alla tua casella di controllo, ogni volta che correggi l'altezza / larghezza dei tuoi controlli / contenitori, diventa più desideroso per il gestore del layout renderli, piuttosto che continuare a calcolare e regolare gli elementi.

  4. / p>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top