Вопрос

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

<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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top