Changer la couleur de surbrillance TextBox lorsqu’un utilisateur sélectionne du texte?

Je cherchais un moyen de changer la couleur de surbrillance de la zone de texte lorsqu’un utilisateur sélectionne du texte. Windows utilise le bleu comme couleur par défaut. Par exemple, sous Microsoft Outlook, lorsque vous écrivez un courrier et sélectionnez (mettez en surbrillance) du texte, la couleur de fond est gris.

Texte sélectionné dans Outlook

TextBox texte sélectionné par l'utilisateur

Tout le monde a dit que je devais remplacer la méthode onPaint mais je ne sais pas comment faire exactement cela. La couleur d’arrière-plan sélectionnée par RichTextbox n’est pas la solution car elle modifie la couleur du texte, pas lorsque l’utilisateur le sélectionne.

En option, vous pouvez compter sur un contrôle ElementHost Windows Forms pour héberger un contrôle WPF TextBox . Ensuite, pour le contrôle WPF TextBox , définissez SelectionBrush et SelectionOpacity .

Exemple

Dans l’exemple suivant, j’ai créé un UserControl Windows Forms contenant un ElementHost pour héberger un contrôle WPF TextBox . Ensuite, pour le contrôle WPF TextBox , définissez SelectionBrush et SelectionOpacity .

 using System; using System.ComponentModel; using System.Windows; using System.Windows.Controls; using System.Windows.Forms.Integration; using System.Windows.Media; public class MyWPFTextBox : System.Windows.Forms.UserControl { private ElementHost elementHost = new ElementHost(); private TextBox textBox = new TextBox(); public MyWPFTextBox() { textBox.SelectionBrush = new SolidColorBrush(Colors.Gray); textBox.SelectionOpacity = 0.5; textBox.TextAlignment = TextAlignment.Left; textBox.VerticalContentAlignment = VerticalAlignment.Center; elementHost.Dock = System.Windows.Forms.DockStyle.Fill; elementHost.Name = "elementHost"; elementHost.Child = textBox; textBox.TextChanged += (s, e) => OnTextChanged(EventArgs.Empty); Controls.Add(elementHost); } [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] public override ssortingng Text { get { return textBox.Text; } set { textBox.Text = value; } } } 

Assemblées référencées

Voici les assemblages référencés requirejs: PresentationCore , PresentationFramework , WindowsBase , WindowsFormsIntegration .

Bonjour, voici le code pour changer la couleur de sélection, mais n’oubliez pas qu’il vous faudra stocker la couleur actuelle. Une fois que vous avez modifié la couleur et que votre application se ferme, vous devez la restaurer car elle change la couleur de l’ensemble. ordinateur non seulement pour le processus actuel.

  [DllImport("user32.dll")] static extern bool SetSysColors(int cElements, int[] lpaElements, uint[] lpaRgbValues); void ChangeSelectColour(Color color) { const int COLOR_HIGHLIGHT = 13; const int COLOR_HIGHLIGHTTEXT = 14; // You will have to set the HighlightText colour if you want to change that as well. //array of elements to change int[] elements = { COLOR_HIGHLIGHT }; List colours = new List(); colours.Add((uint)ColorTranslator.ToWin32(color)); //set the desktop color using p/invoke SetSysColors(elements.Length, elements, colours.ToArray()); }