如何将插入符分配给 WPF 中的控件
需要创建一个新的 WPF 控件并为其提供插入符号。 在 WINFORMS 或以前的 Windows UI 中,使用 WIN API Caret 函数很容易,但现在在 WPF 中,我们没有每个控件的 hwnd 所以...有没有办法做到这一点?
Need to make a new WPF control and give the Caret to it.
In WINFORMS or previos Windows UI it was easy using the WIN API Caret functions, but now in WPF we don't have hwnd for each control so... is there a way to do it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在 WPF 中,插入符号实际上是 CaretElement,它是一个内部 FrameworkElement,用于呈现选择块和插入符号。
如果您不继承某种已经提供插入符号支持的控件并尝试操纵它,遗憾的是,您可能需要从头开始实现它。
编辑
CaretElement 是框架内部的,是的,没有记录。
此处提到< /a>,例如。
商业包。
In WPF, the caret is actually CaretElement, an internal FrameworkElement used for rendering selection blocks and the caret.
If you do not inherit from some sort of control which already offers caret support and try to manipulate it, sadly, you could be facing the need to implement it from scratch.
EDIT
The CaretElement is internal to the framework and yes, not documented.
It is mentioned here, for example.
A closed source custom implementation exists in a commercial package.
WPF 中的插入符号只是另一种动画,没有专门的 API。 绘制一条线,并使用 DoubleAnimation 更改其不透明度。
如果您仔细观察 WPF TextBox,会发现插入符号甚至不执行“像素反转”,它只是在字母上绘制灰色线。
您可以通过实现像素着色器效果在 WPF 中进行像素反转。 可能不值得。 VS2010 beta 不会对文本插入符号进行反转。
除了 TextBox/RichTextBox 之外,您还可以找到其他 3 个编辑组件:
Caret in WPF is an just another animation, no special API for that. Draw a line, and change its opacity with DoubleAnimation.
If you have closer look at WPF TextBox, the caret doesn't even do 'pixel inversion', it's just gray line drawn over the letter.
Potentially you can do pixel inversion in WPF, by implementing a pixel shader effect. Not worth it probably. VS2010 beta doesn't do inversion for text caret.
Apart from TextBox/RichTextBox there are 3 other editing components you can find: