Я использую собственный шрифт, известный как Pigiarniq, в приложении WPF. Я обнаружил, что время от времени слова исчезают из текстовых блоков, использующих этот шрифт. Исчезающие слова должны были появиться в конце строки, в которой они находятся, или, возможно, в следующей строке, что заставляет меня думать, что что-то не так с переносом текста. Я, наконец, (после больших трудностей) изолировал проблему в небольшом фрагменте кода (ПРИМЕЧАНИЕ: это всего лишь тест для подтверждения возникновения проблемы. Это не часть моей программы):
<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>
The word "thicknesses" that occurs after "(uncompacted)" does not appear. If I resize the window manually using the window handle, it will re-appear.
ПРИМЕЧАНИЕ. Я поместил 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.
textBlock1.Width = Double.NaN;
вTextBox.Loaded
обработчике событий? - person publicgk   schedule 30.03.2011Width="850"
, и я уверен, вы найдете значения, которые скрывают текст и от других шрифтов. Ваша композиция немного неясна. Почему вы помещаете текстовый блок в другую сетку? Я думаю, что этот текстовый блок в сетке в сетке немного все портит. Кроме того, оставьте это событие Loaded вне. Не понимаю, почему это должно быть там. - person Markus Hütter   schedule 30.03.2011