Domanda

Attualmente provo a creare classi per un'applicazione WPF simile a Paint.Devo basare le classi LineMovement (linea da StartPoint a EndPoint) e PathMovement (linea che attraversa tutti i punti specificati in una proprietà Points di tipo PointCollection).Queste classi ereditano da Control e ottengono il loro aspetto tramite un ControlTemplate.

Il ControlTemplate aggiunge anche un Adorner all'AdornerLayer degli oggetti Movement contenente un piccolo indicatore visivo per ogni punto mobile della linea specifica.Questi marcatori supportano il trascinamento con il mouse.

Il problema che ho è che in qualche modo le mie classi di movimento non vengono ridipinte quando i loro punti vengono spostati.Ho eseguito il debug del mio codice con Mole e ho scoperto che la polilinea utilizzata per visualizzare la linea ottiene i valori in punti modificati (visibili nella sua proprietà Points) ma semplicemente non viene ridisegnata.

Come posso forzare il ridisegno di un controllo WPF?

È stato utile?

Soluzione

TemplateBinding non supporta due vie associazione di dati (vale a dire l'aggiornamento della raccolta punti con i nuovi valori della polilinea). E 'pensato solo per i dati di sola andata vincolanti per l'uso in modelli di controllo. Vedere blog di Bea Stollnitz: http://bea.stollnitz.com/blog/?p= 38

Altri suggerimenti

Si scopre che TemplateBinding è puro male.

Quando lego i punti della polilinea con {TemplateBinding Points} non si aggiorna, mentre quando lo lego con {Binding RelativeSource={RelativeSource TemplatedParent}} funziona perfettamente.

Nota per me:Non usare mai più questo dannato TemplateBinding.

È necessario per rendere il vostro Movimento oggetti PS hanno la proprietà dei metadati AffectsArrange ( http://msdn.microsoft.com/en-us/library/system.windows.frameworkpropertymetadataoptions.aspx ) - in questo modo quando cambia la proprietà, WPF sa che dovrebbe ridisegnare

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