none
Можно ли сделать свой TextBlock с курсором? RRS feed

  • Вопрос

  • надо сделать замену стандартному TextBox. И ещё: в данном случае лучше использовать TextBlock для отображения текста или Canvas?
    2 сентября 2013 г. 18:48

Ответы

  • Ах да, там ошибка в коде, из-за отступов у родительских контейнеров визуально textblock выходит за границу, а по факту ему еще 30+ пикселей нужно, что бы быть по ширине экрана. Так же, попробуйте поиграться с величинами Padding у ScrollViewer и Margin у текстблока. Например:

     <ScrollViewer x:Name="scroller" HorizontalScrollBarVisibility="Hidden"
                              VerticalScrollBarVisibility="Disabled"
                              Padding="12,0,22,0"
                                  >
                        <TextBlock x:Name="tbText" FontSize="22"
                               Margin="0,0,8.5,0"/>
                    </ScrollViewer>

    В коде поменяйте ScrollToHorizontalOffset, к примеру:

    if (App.Current.Host.Content.ActualWidth < this.tbText.ActualWidth + 50)
                {
                    this.scroller.ScrollToHorizontalOffset(this.tbText.ActualWidth +50);
                }


    8 сентября 2013 г. 19:42

Все ответы

  • Здравствуйте. Можете поподробней? Что Вы подразумеваете под "курсор", что хотите получить от замены TextBox?
    2 сентября 2013 г. 18:52
  • Под курсором я имею ввиду линию, которая разделяет символы (визуально). Программно на место курсора будет записываться новый текст.

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

    Сможете помочь?

    3 сентября 2013 г. 16:41
  • Вам, наверно, нужно свойство IsReadOnly. В этом случае вводить нельзя, но вроде курсор есть...

    3 сентября 2013 г. 17:54
    Отвечающий
  • Этот курсор называется "каретка" :)

    А вам обязательно нужна каретка? Просто можно визуально сделать тот же TextBox, используя Border, ScrollViewer(если нужно будет скроллить) и TextBlock.

    --

    Добавил: не заметил сообщение Алексея. Проверил IsReadOnly - каретки нет, выглядит он как задизейбленный, но зато из него можно скопировать текст.

    • Изменено Oleg Kurzov 3 сентября 2013 г. 18:21
    3 сентября 2013 г. 17:57
  • Мне нужен наверное свой UserControl, в котором курсор лишь показывает, куда будет вставлен последующий текст. Про IsReadOnly знаю, пробовал, не подходит. Отсюда вытекает вопрос: как программно узнать положение символа на экране, в координатах?
    3 сентября 2013 г. 19:00
  • А как сделать, чтобы когда в TextBlock текст переходил за край экрана сделать так, чтобы ширина TextBlock не останавливалась на ширине экрана, а увеличивалась?
    8 сентября 2013 г. 13:07
  • Можете подробней?

    Или Вам нужно что бы при добавлении текста он скроллится к последнему добавленному?

    • Изменено Oleg Kurzov 8 сентября 2013 г. 14:59
    8 сентября 2013 г. 14:58
  • Да, нужно чтобы он скроллился. Как это сделать?
    8 сентября 2013 г. 16:07
  • Спасибо, работает, только некоторые символы все равно за правым край заходят, как это исправить?
    8 сентября 2013 г. 19:13
  • Ах да, там ошибка в коде, из-за отступов у родительских контейнеров визуально textblock выходит за границу, а по факту ему еще 30+ пикселей нужно, что бы быть по ширине экрана. Так же, попробуйте поиграться с величинами Padding у ScrollViewer и Margin у текстблока. Например:

     <ScrollViewer x:Name="scroller" HorizontalScrollBarVisibility="Hidden"
                              VerticalScrollBarVisibility="Disabled"
                              Padding="12,0,22,0"
                                  >
                        <TextBlock x:Name="tbText" FontSize="22"
                               Margin="0,0,8.5,0"/>
                    </ScrollViewer>

    В коде поменяйте ScrollToHorizontalOffset, к примеру:

    if (App.Current.Host.Content.ActualWidth < this.tbText.ActualWidth + 50)
                {
                    this.scroller.ScrollToHorizontalOffset(this.tbText.ActualWidth +50);
                }


    8 сентября 2013 г. 19:42