Внутри моего приложения WPF есть RichTextBox
, и при отображении его текстового содержимого в VS Immediate Window появляется символ f
с акцентом на циркумфлексе, но в окне отображения этот символ отображается только без диакритического знака.
Эти два метода устанавливают и извлекают содержимое RTB:
Function rtbText(rtb As RichTextBox) As String
Dim txtRng As New TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd)
Return txtRng.Text
End Function
Sub rtbSetText(rtb As RichTextBox, s As String)
Dim flowDoc As New FlowDocument
Dim r As New Run(s)
Dim p As New Paragraph
p.Inlines.Add(r)
flowDoc.Blocks.Add(p)
rtb.Document = flowDoc
End Sub
Отчеты «Немедленное окно» для контроля RTB rtbString
:
?rtbtext(rtbString)
"f̂(x,y,t)=1/(n*h_x*h_y*h_t)¡∑_i=1^n▒k(x−X_i)/(h_x)×k(y−Y_i)/(h_y)×k(t−T_i)/(h_t)" & vbCrLf
Первый символ f̂ присутствует в rtbString
, но отображается неправильно:
Это Вердана ?rtbString.FontFamily .tostring "Вердана"
Шрифт Arial работает. Хорошо, «Courier New» не работает так же, как Verdana.
Это проблема, связанная с семейством шрифтов. Попробуйте установить его, например, на Segoe UI
:
<RichTextBox FontFamily = "Segoe UI" FontSize = "22" ...
Если шрифт не содержит требуемого символа, система пытается адаптировать текущий шрифт и не всегда получает ожидаемый результат.
@XavierJunqué: Я бы посоветовал вам изменить метод rtbSetText()
, чтобы установить необходимый шрифт для нового Run()
. Таким образом, добавление определенного текста не повлияет на другие части документа.
@XavierJunqué: это зависит от настроек Windows и набора шрифтов, используемых Windows. Например, в моей Windows шрифт Arial
не дает ожидаемого результата. Точнее, это связано с [кодовой страницей Windows` ](en.wikipedia.org/wiki/Windows_code_page)
Тогда как гарантировать, что при развертывании приложения винда пользователя будет отображаться корректно?
Это хороший вопрос! Например, см. Упаковка шрифтов с помощью приложений.
Итак, я понимаю, что проблема связана со шрифтом, а не с ОС.
Точно. Если в приложении используются специальные символы, вы не можете быть уверены, что подходящий шрифт будет доступен на компьютере пользователя. Поэтому использование встроенного в приложение шрифта является хорошим решением.
Большое спасибо за Вашу помощь. Я встроил шрифт Tahoma и установил его в новый Run().
Можете ли вы проверить, какое семейство шрифтов используется, пожалуйста? Просто напечатайте
rtb.Document.FontFamily
в конце строки методаrtbSetText()
. Скорее всего проблема связана с используемым шрифтом.