当我输入此文本框时,我需要默认行为是覆盖,而不是插入。 我不知道我是否清楚自己。
例如:我有一个MaxLenght = 4的文本框。当它获得焦点时,它需要覆盖从第一个到最后一个的字符。
我可以使用“插入”按钮执行此操作。但我需要一个自动解决方案。
答案 0 :(得分:1)
您可以通过在 _OvertypeMode
属性上将 True
设置为 TextEditor
来使用反射TextBox。
假设您在XAML中有TextBox声明:
<TextBox x:Name="textBox"/>
在后面的代码中,你可以这样做:
PropertyInfo textEditorProperty = typeof(TextBox).GetProperty(
"TextEditor", BindingFlags.NonPublic | BindingFlags.Instance);
object textEditor = textEditorProperty.GetValue(textBox, null);
// set _OvertypeMode on the TextEditor
PropertyInfo overtypeModeProperty = textEditor.GetType().GetProperty(
"_OvertypeMode", BindingFlags.NonPublic | BindingFlags.Instance);
overtypeModeProperty.SetValue(textEditor, true, null);
来源 - MSDN link。
答案 1 :(得分:1)
您可以尝试处理按键事件,例如:
private void MyTextBox_KeyDown(object sender, KeyEventArgs e)
{
int myCaretIndex = MyTextBox.CaretIndex;
char[] characters = MyTextBox.Text.ToCharArray();
if (myCaretIndex < characters.Length)
{
characters[myCaretIndex] = char.Parse(e.Key.ToString());
MyTextBox.Text = string.Join("", characters);
MyTextBox.CaretIndex = myCaretIndex + 1;
e.Handled = true;
}
}