如何为WPF4应用程序使用插入键(如在传统windows中)?
好的,我知道新版本的windows默认情况下不使用insert键,您必须为其编程。我希望能够在我的文本框中键入内容,并覆盖其中的内容,就像在旧窗口中激活插入键一样。这只是我的WPF4,VB.net应用程序 最新资料: 这就是我的意思:我需要模仿旧的终端。我需要以编程方式激活所有控件的覆盖模式。与键盘上的“插入”键的效果相同。只有该密钥在WPF环境中不起作用 示例:我在一个文本框中输入单词world,该文本框显示“Hello!”: 文本框的开头为:[您好!] 文本框现在是[世界!]如何为WPF4应用程序使用插入键(如在传统windows中)?,wpf,vb.net,visual-studio,keyboard,insert,Wpf,Vb.net,Visual Studio,Keyboard,Insert,好的,我知道新版本的windows默认情况下不使用insert键,您必须为其编程。我希望能够在我的文本框中键入内容,并覆盖其中的内容,就像在旧窗口中激活插入键一样。这只是我的WPF4,VB.net应用程序 最新资料: 这就是我的意思:我需要模仿旧的终端。我需要以编程方式激活所有控件的覆盖模式。与键盘上的“插入”键的效果相同。只有该密钥在WPF环境中不起作用 示例:我在一个文本框中输入单词world,该文本框显示“Hello!”: 文本框的开头为:[您好!] 文本框现在是[世界!] 您会注意到,一
您会注意到,一个字符的感叹号保留了下来,因为世界上没有足够的字符来替换“!” 在WPF 4中,当文本框有焦点时按插入键激活覆盖模式。您的意思是一次为窗口上的所有文本框在插入和覆盖模式之间切换吗?尝试一下(使用此控件而不是普通的
TextBox
es):
是的,我需要能够为每个文本框(或类似)控件进行编程设置。
public class InsertModeTextBox : TextBox
{
public InsertModeTextBox()
{
InitializeComponent();
}
protected override void OnTextInput(TextCompositionEventArgs e)
{
var txt = e.Text;
var len = txt.Length;
var pos = CaretIndex;
var builder = new StringBuilder();
if (pos > 0) builder.Append(Text.Substring(0, pos)); // text before caret
builder.Append(txt); // new text
if (Text.Length > pos + len) builder.Append(Text.Substring(pos + len)); // text after overwrite
Text = builder.ToString();
CaretIndex = pos + len;
e.Handled = true;
}
}