我搜索了类似的问题,但没有找到任何有用的信息。Caret 似乎不可用,并且我不知道如何深入到嵌入在组合框中的文本框或其他控件。
我搜索了类似的问题,但没有找到任何有用的信息。Caret 似乎不可用,并且我不知道如何深入到嵌入在组合框中的文本框或其他控件。
您需要从组合框的控件模板中获取 PART_EditableTextBox
控件。最简单的方法是通过派生自ComboBox
的类,覆盖OnApplyTemplate
方法,然后在需要具有此扩展行为的地方使用该派生类作为组合框。
protected void override OnApplyTemplate()
{
var myTextBox = GetTemplateChild("PART_EditableTextBox") as TextBox;
if (myTextBox != null)
{
this.editableTextBox = myTextBox;
}
}
在获得文本框之后,您可以设置插入符号位置,将SelectionStart
设置为您想要插入符号出现的位置,并将SelectionLength
设置为零。
public void SetCaret(int position)
{
this.editableTextBox.SelectionStart = position;
this.editableTextBox.SelectionLength = 0;
}
如果不想处理派生类,只是想为任意ComboBox设置插入符号,则更简单的方法是,在需要时从模板中获取文本框(类似于接受的答案),然后直接更新插入符号位置。
var cmbTextBox = (TextBox)myComboBox.Template.FindName("PART_EditableTextBox", myComboBox);
cmbTextBox.CaretIndex = 0;
void
,但它已经提到需要派生一个类。谢谢。 - Jeff YatesComboBox
的派生类中重写OnApplyTemplate
,然后在需要具有此扩展行为的任何地方使用该派生类的组合框。” - Jeff YatesGetTemplateChild
获取 "PART_EditableTextBox" 元素。在后续的 .NET 版本中,SelectionStart
和SelectionLength
成员可以直接进行编辑。 - Jim Fell