文本框插入符号样式

Posted

技术标签:

【中文标题】文本框插入符号样式【英文标题】:TextBox Caret Styling 【发布时间】:2012-03-06 15:13:30 【问题描述】:

我发现了一些关于在 WPF4 中设置 CaretBrushes 的内容,但实际上有没有人更改过插入符本身?

我想做的是在 INSERT 模式下使用 OVERWRITE 插入符号。我见过hack from .Net 3.5 times,但它表现不佳并且缺乏实际的光标移动......

如果插入符号有一个模板,那就太好了 - 这将与整个 WPF 理念一致......

有什么建议吗?

【问题讨论】:

见codeproject.com/Articles/633935/… 【参考方案1】:

CaretElement 是一个内部密封类,无法通过例如数据模板进行自定义。至少,插入符号笔刷是可以改变的。

<TextBox Text="This is some random text" CaretBrush="Blue" />

如果你想在插入符号画笔上有一个线性渐变,可以这样做。

<TextBox Text="This is some random text" FontSize="20">
        <TextBox.CaretBrush>
            <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                <LinearGradientBrush.GradientStops>
                    <GradientStop Color="Blue" Offset="0" />
                    <GradientStop Color="Red" Offset="1" />
                </LinearGradientBrush.GradientStops>
            </LinearGradientBrush>
        </TextBox.CaretBrush>

我也尝试使用 Visual Brush,但插入符号始终显示为一条小的垂直线。

【讨论】:

【参考方案2】:

因为框架使用与背景颜色相反的颜色来设置插入符号的颜色,如果将背景属性设置为 x:Null,那么最终会得到默认的黑色插入符号,它位于黑色背景上可能特别难以看到!

http://www.codeproject.com/Articles/34736/Changing-the-Caret-Colour-in-WPF

解决此问题的简单方法是实际为 Background 属性指定一个值。如果您有黑色背景并想要一个白色插入符号,您可以将 Background 属性的值设置为 #00000000,这是完全透明的黑色(如果有意义的话!)。 框架似乎忽略了颜色的不透明度组件,因此您最终会得到透明背景和白色插入符号!

结论:你必须指定带有不透明度的背景属性来控制插入符号的样式。

【讨论】:

以上是关于文本框插入符号样式的主要内容,如果未能解决你的问题,请参考以下文章

如何选择文本框中的文本,插入符号位于选择的开头?

如何在文本框中插入符号(英镑、欧元、版权)

WinForms 文本框的自定义插入符号

将插入符号/光标位置设置为字符串值 WPF 文本框的末尾

当父元素可拖动时如何允许文本框插入符号位置(在鼠标单击时)

在富文本框中定位列表框