Как установить позицию каретки в тексте WPF Editable ComboBox - PullRequest
9 голосов
/ 21 февраля 2011

Я искал похожий вопрос и ничего не смог найти. .Caret, по-видимому, недоступен, и я не знаю, как перейти к текстовому полю или к любому другому элементу управления, встроенному в комбинированный список.

Ответы [ 2 ]

10 голосов
/ 21 февраля 2011

Вам необходимо получить элемент управления PART_EditableTextBox из шаблона элемента управления поля со списком.Самый простой способ сделать это - переопределить OnApplyTemplate в производной ComboBox, а затем использовать эту производную везде, где вам нужен комбинированный список с таким расширенным поведением.

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;
}
5 голосов
/ 27 октября 2017

Еще более простой способ, если вы не хотите иметь дело с производными классами и просто хотите установить каретку для любого случайного ComboBox, это получить текстовое поле из шаблона (аналогично принятому ответу), когда вы нужно, а затем просто обновить позицию каретки.

var cmbTextBox = (TextBox)myComboBox.Template.FindName("PART_EditableTextBox", myComboBox);
cmbTextBox.CaretIndex = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...