Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
 Определить текст, который поместился в FormattedText  [new]
RomanA
Member

Откуда:
Сообщений: 3
Пишу некую программу, часть функционала которой есть постраничное отображение данных. Сначала текст нужно разбить на страницы, а потом его отображать. Для отображения и разбиения хочу использовать объект FormattedText.


FormattedText someFormattedText = new
      FormattedText("Some text...",
      CultureInfo.GetCultureInfo("en-us"),
      FlowDirection.LeftToRight,
      new Typeface("Verdana"),
      36, System.Windows.Media.Brushes.Black);


Размер области для рисования ограничен:

someFormattedText.MaxTextWidth = someWidth;
someFormattedText.MaxTextHeight = someHeight;

someFormattedText.Trimming = TextTrimming.None;


Нужно определить текст который поместится в область, чтобы знать где заканчивается старая страница.

И вот на этом месте я застрял...

Первая мысль была использовать метод последовательного приближения, закомментировав задание MaxTextHeight, тем самым определяя необходимую для отображения текущего куска текста высоту. Тем более, что примерное количество символов, помещающихся в область, будет известно после первой страницы и итераций на страницу не должно быть слишком много. Но тут, как оказалось, есть существенная проблема - свойство Text у объекьа FormattedText только для чтения, а значит нужно будет постоянно пересоздавать объект, что, вероятно, очень накладно.

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

Может быть кто-нибудь сталкивался с подобной проблемой или у кого-нибудь есть еще идеи?
Неужели никак нельзя вытащить информацию о реально отображенном значении из FormattedText?
25 май 15, 17:29    [17686879]     Ответить | Цитировать Сообщить модератору
Все форумы / WPF, Silverlight Ответить