WPF TextBox.SelectAll () не работает
-
06-07-2019 - |
Вопрос
Я использовал следующий шаблон в своем проекте:
<DataTemplate
x:Key="textBoxDataTemplate">
<TextBox
Name="textBox"
ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"
Tag="{Binding}"
PreviewKeyDown="cellValueTextBoxKeyDown">
<TextBox.Text>
<MultiBinding
Converter="{StaticResource intToStringMultiConverter}">
<Binding
Path="CellValue"
Mode="TwoWay">
<Binding.ValidationRules>
<y:MatrixCellValueRule
MaxValue="200" />
</Binding.ValidationRules>
</Binding>
<Binding
RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type y:MatrixGrid}}"
Path="Tag"
Mode="OneWay" />
</MultiBinding>
</TextBox.Text>
</TextBox>
</DataTemplate>
Я использовал этот шаблон для создания редактируемой матрицы для пользователя. Пользователь может перемещаться от ячейки к ячейке в матрице, и я хотел бы выделить данные в выбранном текстовом поле, но это не работает. Я вызвал TextBox.Focus () и TextBox.SelectAll () для достижения эффекта, но ничего. Focus () работает, но текст никогда не выделяется.
Любая помощь приветствуется и приветствуется.
Решение
Хорошо, если кому-то интересно, решение этой моей проблемы состояло в том, чтобы включить оператор e.Handled = true;
в метод обработчика событий, где textBox.SelectAll ()
и textBox.Focus ()
. Р>
Проблема заключалась в том, что я прикрепил обработчик события к событию PreviewKeyDown
текстового поля, которое обрабатывает событие туннелирования и, возможно, SelectAll ()
и Focus ()
вызовы игнорируются без вызова оператора e.Handled = true;
.
Надеюсь, это кому-нибудь поможет.
Другие советы
Без остальной части вашего кода трудно сказать, сработает ли это для вас, но я собрал небольшой пример, используя ваш DataTemplate (за исключением частей, которые ссылаются на код, который не был опубликован). Р>
Мне удалось выделить весь текст в текстовых полях, добавив обработчик событий GotFocus в TextBox в DataTemplate:
<TextBox
...
GotFocus="textBox_GotFocus"
...>
...
</TextBox>
И код позади:
private void textBox_GotFocus(object sender, RoutedEventArgs e)
{
TextBox textBox = sender as TextBox;
if (textBox != null)
{
textBox.SelectAll();
}
}
Дайте мне знать, если вы пытаетесь выбрать все при разных обстоятельствах (а не когда коробка получает фокус).
Вот очень хорошее очень простое решение (я не знаю, работает ли оно для вашего шаблона, но попробуйте): http://social.msdn.microsoft.com/forums/en-US/wpf/thread/564b5731-af8a-49bf -b297-6d179615819f р>