文本框插入符号样式
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,这是完全透明的黑色(如果有意义的话!)。 框架似乎忽略了颜色的不透明度组件,因此您最终会得到透明背景和白色插入符号!
结论:你必须指定带有不透明度的背景属性来控制插入符号的样式。
【讨论】:
以上是关于文本框插入符号样式的主要内容,如果未能解决你的问题,请参考以下文章