当用户选择文本时,更改TextBox高亮颜色?

Tan*_*las 12 c# winforms

我一直在寻找在用户选择文本时更改文本框高亮颜色的方法.Windows使用蓝色作为默认颜色.例如,在Microsoft Outlook上,当您编写邮件并选择(突出显示)文本时,背面颜色为灰色.

Outlook中的选定文本

TextBox按用户选择文本

大家都说我需要覆盖onPaint方法,但我不知道究竟是怎么做的.RichTextbox selectedbackground颜色不是解决方案,因为它更改了文本的颜色,而不是用户选择它时.

Rez*_*aei 2

作为一种选择,您可以依赖ElementHostWindows 窗体控件来承载 WPFTextBox控件。然后对于 WPFTextBox控件,设置SelectionBrushSelectionOpacity

例子

在下面的示例中,我创建了一个UserControl包含ElementHost托管 WPFTextBox控件的 Windows 窗体。然后对于 WPFTextBox控件,设置SelectionBrushSelectionOpacity

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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

引用的程序集

以下是所需引用的程序集:PresentationCorePresentationFrameworkWindowsBaseWindowsFormsIntegration