È 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
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.
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
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
È certamente un incubo di buona qualità. –
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. –
Quello CaretElement non è documentato, nemmeno accessibile giusto? – jmayor
Risposta modificata per completezza. –
Ho creato un articolo per spiegarne uno in WPF http://www.codeproject.com/Articles/633935/Customizing-the-Caret-of-a-WPF-TextBox –