Sto lavorando su un'applicazione di windows store e una delle cose che voglio fare in app è visualizzare un log che mostra i messaggi di stato e altri interessanti siti informativi, come l'utente lavora le cose. A tal fine, Ho aggiunto un controllo ListBox come segue:
<ListBox x:Nome ="GameStateLog" HorizontalAlignment ="Centro" Altezza ="221" VerticalAlignment ="In alto" Larghezza ="499" Imbottitura ="0" FontSize ="10">
Il codice c# per compilare l'oggetto listbox in fase di esecuzione è stato lungo le linee di:
GameStateLog.Items.Insert(0, GameStateCounter + ": Nuovo gioco di stato: in attesa di giocatore 1 nome");
Questo ha funzionato bene abbastanza, ma l'interfaccia utente ha mostrato una quantità pazzesca di imbottitura intorno i singoli messaggi che sono stati aggiunti. Questo ha un senso se desidera che gli utenti finali siano in grado di selezionare questi elementi, ma non ha senso quando voglio solo mostrare una serie di messaggi di log corrente – gli utenti non selezionare questi, solo visualizzarli. Era stranamente difficile di trovare un modo semplice per fare questo e probabilmente, il modo che ho trovato non è necessariamente "facile", ma ho avuto lavoro OK. La comprensione chiave è venuto da questo distacco qui (http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/c4a6f694-bd46-4779-ab83-b1c2fcb2397c) da Bob Relyea. Invece di aggiungere stringhe alla raccolta di articoli su ListBox, aggiungere ListBoxItem. Aggiungendo una stringa, ListBox stava creando un oggetto ListBoxItem in proprio. Non ero in grado di incidere nulla su quel ListBoxItem dopo il fatto. Il nuovo codice è:
privato void AddGameStateLogMessage(stringa Strumento) { ListBoxItem li = Nuovo ListBoxItem(); li.Contenuto = strumento; li.MaxHeight = 25; Spessore thisPadding = Nuovo Spessore(5, 0, 5, 0); li.Imbottitura = thisPadding; GameStateLog.Items.Insert(0,li); }
Qui sto creando di ListBoxItem e inserendole. Ho rimosso l'imbottitura in eccesso impostando il suo spessore.
Questo è abbastanza flessibile, come intendo fare qualche colore codifica per evidenziare particolari tipi di messaggi e aggiungendo direttamente ListBoxItem arriva al loro stile qualsiasi modo desiderato.
Spero che questo aiuti qualcuno!
</fine>
Seguimi su Twitter a http://www.twitter.com/pagalvin