Изменение размера меток

У меня есть диаграмма в WPF с множеством меток. Текст на этих этикетках загружается динамически и может быть изменен. Если я установлю ширину только на авто, то эти метки могут перекрываться, что делает текст нечитаемым.

Диаграмма поддерживает несколько размеров, поэтому, если она становится больше, размер столбцов изменяется, и для текста остается больше места. Теперь я хочу настроить текст на доступное пространство. Если он становится слишком маленьким, я больше не хочу отображать метку (доступна всплывающая подсказка, поэтому пользователь по-прежнему получает необходимую информацию). Рассмотрим строку «Случай 1, бла-бла», вероятно, не хватит места для отображения всей строки, а только первого слова. В этом случае я хочу, чтобы строка была «Case 1..», где .. указывало, что во всплывающей подсказке есть дополнительная информация.

Я могу определить длину, доступную для строки. Но как я могу определить место, которое займет одна буква? Конечно, я мог бы просто изменить размер метки, но тогда она просто обрезала бы строку в любом месте, что, вероятно, бесполезно для пользователя (и выглядит некрасиво).

Любые идеи?


person Nils    schedule 11.05.2009    source источник


Ответы (2)


Если вы можете использовать TextBlocks вместо меток, тогда у них есть TextTrimming, которое сделает это за вас либо до ближайшего символа, либо до ближайшего слова.


Хотя вы, кажется, довольны свойством TextTrimming, я отредактирую его, добавив, что элемент управления TextBox имеет GetRectFromCharacterIndex, который позволит вам узнать размер на экране одного или нескольких символов, если настройки шрифта соответствуют вашей метке. Это может быть полезно, если вы хотите обрезать определенные места на этикетке, а не ближайший символ/слово.

person Martin Harris    schedule 11.05.2009

Не эксперт в WPF, но я думаю, что вам нужно будет сделать это в коде, а не в XAML.

Начните с получения фактической ширины пространства в пикселях, доступного для текста. Затем посмотрите на набор символов, шаг точек и т. д., используемые во внешнем интерфейсе XAML, и оттуда рассчитайте ширину пикселя, необходимую для каждого символа.

Вы также можете изменить размер символов, а также уменьшить длину метки.

person ChrisBD    schedule 11.05.2009
comment
спасибо за ответ, но звучит слишком сложно, посмотрю на свойство TextTrimming (см. ниже) - person Nils; 11.05.2009