2009-07-19 21 views
5

Necesito hacer un nuevo control WPF y darle el Caret a él. En WINFORMS o en la interfaz de usuario de Windows anterior era fácil usar las funciones WIN API Caret, pero ahora en WPF no tenemos hwnd para cada control, así que ... ¿hay alguna manera de hacerlo?Cómo puedo asignar el Caret a un control en WPF

Respuesta

3

En WPF, el símbolo de intercalación es realmente CaretElement, un FrameworkElement interno utilizado para representar bloques de selección y el símbolo de intercalación.

Si no heredas de algún tipo de control que ya ofrece soporte de intercalación y tratas de manipularlo, lamentablemente, podrías estar enfrentando la necesidad de implementarlo desde cero.

EDITAR

El CaretElement es interno al marco y sí, no documentada.

Se menciona here, por ejemplo.

Existe una implementación personalizada de código cerrado en un paquete commercial.

+0

Eso CaretElement no está documentado, ni siquiera accesible, ¿verdad? – jmayor

+0

Respuesta modificada para completar. –

+1

Creé un artículo explicando para crear uno en WPF http://www.codeproject.com/Articles/633935/Customizing-the-Caret-of-a-WPF-TextBox –

1

Caret en WPF es una animación más, sin API especial para eso. Dibuja una línea y cambia su opacidad con DoubleAnimation.

Si mira más de cerca a WPF TextBox, el símbolo de intercalación ni siquiera hace "inversión de píxeles", es solo una línea gris dibujada sobre la letra.

Potencialmente puede realizar la inversión de píxeles en WPF, mediante la implementación de un efecto de sombreado de píxeles. No vale la pena, probablemente. VS2010 beta no hace inversión para el texto de intercalación.

Aparte de cuadro de texto/RichTextBox hay otros 3 componentes de edición se pueden encontrar:

  • Expresión editor de código de mezcla
  • Visual Studio editor de código 2010
  • SharpDevelop editor de código de 4
+0

Ok, es complicado ... y luego TExt debe ser manejado por el evento TextInput así como por los eventos Preview/KeyDow/UP. Es una pesadilla hacerlo desde cero ... Gracias por la ayuda. Todos ustedes, chicos. – jmayor

+0

Sin duda es una pesadilla de buena calidad. –

+0

Relacionado: [¿Cómo obtengo el período de interrelación del sistema en .NET?] (Http://stackoverflow.com/questions/11986832/how-do-i-get-the-systems-caret-period-in-net) ... y aunque no hay una forma directa de recuperar la frecuencia de parpadeo de intercalación en WPF aparte de utilizar P/Invoke o referencia de WinForms (decidir por sí mismo cuál considera el mal menor), la clase 'SystemParameters' de WPF proporciona una ['CaretWidth'] (http://msdn.microsoft.com/en-us/library/system.windows.systemparameters.caretwidth.aspx) campo. –

Cuestiones relacionadas