Я использую пользовательский шрифт, известный как Pigiarniq в приложении WPF. Я обнаружил, что время от времени слова исчезают из TextBlocks, которые используют этот шрифт. Слова, которые исчезают, должны были появиться в конце строки, в которой они находятся, или, возможно, в следующей строке, что заставляет меня думать, что с переносом текста что-то не так. Я наконец (после многих трудностей) выделил проблему для небольшого фрагмента кода (ПРИМЕЧАНИЕ: это всего лишь тест для подтверждения возникновения проблемы. Это не является частью моей программы):
<Window x:Class="Test_the_textbox_width.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="850">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition />
</Grid.RowDefinitions>
<Grid
HorizontalAlignment="Center">
<TextBlock HorizontalAlignment="Left"
Name="textBlock1"
VerticalAlignment="Top"
FontFamily="Pigiarniq%20Regular.ttf#Pigiarniq"
TextWrapping="Wrap"
FontSize="15"
Margin="10">
<TextBlock.Text>
You do not need to enter both manually. Rates are calculated using true depositional
(uncompacted) thicknesses, rather than measured present-day thicknesses.
</TextBlock.Text>
</TextBlock>
</Grid>
</Grid>
Слово «толщина», которое встречается после «(без уплотнения)», не появляется. Если я изменю размер окна вручную, используя дескриптор окна, оно появится снова.
ПРИМЕЧАНИЕ: я поместил TextBlock в элемент Grid выше, потому что иногда эта проблема возникает, когда TextBlock находится в Grid. В другом случае это было внутри InlineUIContainer. Были и другие случаи.
Я обнаружил, что такое поведение не происходит, если я устанавливаю ширину явно, например, если я подписываюсь на событие Loaded в TextBlock:
private void textBlock1_Loaded(object sender, RoutedEventArgs e)
{
textBlock1.Width = textBlock1.ActualWidth;
//textBlock1.Width = Double.NaN; //if you leave this in, you get the bad behaviour
}
Очень странно! Любые идеи о том, как предотвратить это? Мой босс действительно хотел бы использовать этот шрифт, поэтому я не могу просто выбрать другой шрифт (я никогда не видел, чтобы это случилось с любым другим шрифтом). Я также не слишком заинтересован в том, чтобы наблюдать за каждым изменением макета и соответствующим образом изменять размеры каждого текстового блока, использующего Pigiarniq.