WPF TextBox.SelectAll () не работает - PullRequest
       29

WPF TextBox.SelectAll () не работает

3 голосов
/ 23 октября 2009

Я использовал следующий шаблон в моем проекте:

<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 () для достижения эффекта, но ничего. Фокус () работает, но текст никогда не выделяется.

Любая помощь приветствуется и приветствуется.

Ответы [ 3 ]

13 голосов
/ 23 февраля 2010

Хорошо, если кому-то интересно, моей проблемой было бы включить оператор e.Handled = true; в метод обработчика событий, где вызываются textBox.SelectAll() и textBox.Focus().

Проблема заключалась в том, что я прикрепил обработчик событий к событию PreviewKeyDown текстового поля, которое обрабатывает туннельное событие, и, вероятно, вызовы SelectAll() и Focus() игнорируются без вызова оператора e.Handled = true;.

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 02 мая 2013

Вот очень хорошее очень простое решение (я не знаю, работает ли оно для вашего шаблона, но попробуйте): http://social.msdn.microsoft.com/forums/en-US/wpf/thread/564b5731-af8a-49bf-b297-6d179615819f

0 голосов
/ 03 декабря 2009

Без остальной части вашего кода трудно сказать, сработает ли это для вас, но я собрал небольшой пример, используя ваш 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();
        }
    }

Дайте мне знать, если вы пытаетесь выбрать все при разных обстоятельствах (а не когда коробка получает фокус).

...