Как установить позицию каретки в редактируемом текстовом поле WPF
Я искал аналогичный вопрос и ничего не мог найти. .Каре не нравится. и я не знаю как перейти на текстовое поле или любой контроль внедряется в комбобокс.
2 ответов
вам нужно добраться до PART_EditableTextBox
управление из шаблона управления поля со списком. Самый простой способ сделать это-переопределить OnApplyTemplate
вывод ComboBox
а затем используйте этот вывод везде, где вам нужно поле со списком с этим расширенным поведением.
protected void override OnApplyTemplate()
{
var myTextBox = GetTemplateChild("PART_EditableTextBox") as TextBox;
if (myTextBox != null)
{
this.editableTextBox = myTextBox;
}
}
как только у вас есть текстовое поле, вы можете установить позицию курсора, set 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;