Change the TextBox highlight color when a user selects text?

前端 未结 2 1414
你的背包
你的背包 2020-12-15 22:43

I\'ve been looking for the way to change the textbox highlight color when a user select text. Windows uses blue as default color. For example, on Microsoft Outlook, when you

相关标签:
2条回答
  • 2020-12-15 22:57

    As an option, you can rely on an ElementHost Windows Forms control to host a WPF TextBox control. Then for the WPF TextBox control, set SelectionBrush and SelectionOpacity.

    Example

    In the following example I've created a Windows Forms UserControl containing an ElementHost to host a WPF TextBox control. Then for the WPF TextBox control, set SelectionBrush and 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 string Text
        {
            get { return textBox.Text; }
            set { textBox.Text = value; }
        }
    }
    

    Referenced Assemblies

    Here are required referenced assemblies: PresentationCore, PresentationFramework, WindowsBase, WindowsFormsIntegration.

    0 讨论(0)
  • 2020-12-15 23:05

    Hi here is the code to change the selection colour just keep in mind that you will have to store the current colour and then once you've changed the colour and your application closes you would need to restore it because this changes the colour of the whole computer not just for the current process.

        [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<uint> colours = new List<uint>();
            colours.Add((uint)ColorTranslator.ToWin32(color));
    
            //set the desktop color using p/invoke
            SetSysColors(elements.Length, elements, colours.ToArray());
        }
    
    0 讨论(0)
提交回复
热议问题