2009-07-19 7 views
5

Besoin de faire un nouveau contrôle WPF et lui donner le Caret. Dans WINFORMS ou l'interface utilisateur Windows précédente, il était facile d'utiliser les fonctions Caret de l'API WIN, mais maintenant, dans WPF, nous n'avons pas de commande pour chaque contrôle, alors ... y a-t-il un moyen de le faire?Comment est-ce que je peux assiter le Caret à un contrôle dans WPF

Répondre

3

Dans WPF, le signe insertion est en fait CaretElement, un objet FrameworkElement interne utilisé pour rendre les blocs de sélection et le curseur.

Si vous n'héritez pas d'une sorte de contrôle qui offre déjà le support du curseur et que vous essayez de le manipuler, vous risquez malheureusement d'avoir à le mettre en œuvre à partir de zéro.

EDIT

Le CaretElement est interne au cadre et oui, non documenté. Par exemple, il est mentionné here.

Une implémentation personnalisée à code source fermé existe dans un package commercial.

+0

Ce CaretElement n'est pas documenté, pas même accessible, n'est-ce pas? – jmayor

+0

Réponse éditée pour l'exhaustivité. –

+1

J'ai créé un article expliquant en créer un dans WPF http://www.codeproject.com/Articles/633935/Customizing-the-Caret-of-a-WPF-TextBox –

1

Caret dans WPF est juste une autre animation, pas d'API spéciale pour cela. Dessinez une ligne et modifiez son opacité avec DoubleAnimation. Si vous regardez de plus près WPF TextBox, le curseur ne fait même pas d'inversion de pixel, c'est juste une ligne grise dessinée au-dessus de la lettre. Potentiellement, vous pouvez faire l'inversion de pixels dans WPF, en implémentant un effet de pixel shader. Ça ne vaut pas le coup. VS2010 beta ne fait pas d'inversion pour le texte de texte.

En dehors de TextBox/RichTextBox il y a 3 autres composants d'édition, vous trouverez:

  • Expression éditeur de code Blend
  • Visual Studio 2010 éditeur de code
  • SharpDevelop 4 éditeur de code
+0

Ok, c'est délicat ... et puis TExt doit être géré par l'événement TextInput ainsi que par les événements Preview/KeyDow/UP. C'est un cauchemar de le faire à partir de zéro .... Merci pour l'aide. Vous tous. – jmayor

+0

C'est certainement un cauchemar de bonne qualité. –

+0

En relation: [Comment puis-je obtenir la période de caret de systèmes dans .NET?] (Http://stackoverflow.com/questions/11986832/how-do-i-get-the-systems-caret-period-in-net) ... et bien qu'il n'y ait pas de moyen direct de récupérer la fréquence de clignotement du caret dans WPF autrement qu'en utilisant P/Invoke ou en référençant WinForms (décidez vous-même quel est le moindre mal), la classe 'SystemParameters' de WPF fournit un ['CaretWidth'] (http://msdn.microsoft.com/en-us/library/system.windows.systemparameters.caretwidth.aspx) champ. –

Questions connexes