2009-07-19 3 views
5

È necessario creare un nuovo controllo WPF e assegnarvi il Caret. In WINFORMS o in precedenza nell'interfaccia utente di Windows, è stato facile utilizzare le funzioni Caret API WIN, ma ora in WPF non abbiamo hwnd per ogni controllo, quindi ... c'è un modo per farlo?Come posso assestare il Caret a un controllo in WPF

risposta

3

In WPF, il caret è in realtà CaretElement, un FrameworkElement interno utilizzato per il rendering dei blocchi di selezione e il punto di inserimento.

Se non si eredita da un controllo che offre già il supporto per il caret e si tenta di manipolarlo, purtroppo, si potrebbe dover affrontare la necessità di implementarlo da zero.

EDIT

Il CaretElement è interno al quadro e sì, non è documentata.

Viene citato, ad esempio, here.

Un'implementazione personalizzata di origine chiusa esiste in un pacchetto commercial.

+0

Quello CaretElement non è documentato, nemmeno accessibile giusto? – jmayor

+0

Risposta modificata per completezza. –

+1

Ho creato un articolo per spiegarne uno in WPF http://www.codeproject.com/Articles/633935/Customizing-the-Caret-of-a-WPF-TextBox –

1

Caret in WPF è solo un'altra animazione, nessuna API speciale per questo. Disegna una linea e modifica la sua opacità con DoubleAnimation.

Se si osserva più da vicino il TextBox WPF, il cursore non esegue nemmeno l'inversione dei pixel, è solo una linea grigia disegnata sulla lettera.

Potenzialmente è possibile eseguire l'inversione dei pixel in WPF, implementando un effetto pixel shader. Non ne vale la pena probabilmente. VS2010 beta non fa inversione per il testo.

parte TextBox/RichTextBox ci sono altri 3 componenti di editing si possono trovare:

  • Expression editor di codice Miscela
  • Visual Studio editor di codice 2010
  • SharpDevelop editor di 4 Codice
+0

Ok, è difficile ... e poi TExt deve essere gestito dall'evento TextInput e dagli eventi Preview/KeyDow/UP. È un incubo farlo da zero .... Grazie per l'aiuto. Tutti voi ragazzi. – jmayor

+0

È certamente un incubo di buona qualità. –

+0

Correlato: [Come posso ottenere il periodo di cura del sistema in .NET?] (Http://stackoverflow.com/questions/11986832/how-do-i-get-the-systems-caret-period-in-net) ... e mentre non esiste un modo diretto per recuperare la frequenza di lampeggiamento del cursore in WPF se non usando P/Invoke o WinForms di riferimento (decidi tu stesso quale dei due consideri il male minore), la classe 'SystemParameters' di WPF fornisce un ['' CaretWidth'] (http://msdn.microsoft.com/en-us/library/system.windows.systemparameters.caretwidth.aspx) campo. –