WPF アプリケーションでPigiarniqと呼ばれるカスタム フォントを使用しています。このフォントを使用する 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 内にある場合にこの問題が発生することがあるため、上記の Grid 要素に TextBlock を配置しました。別のインスタンスでは、InlineUIContainer 内にありました。他にも例がありました。
TextBlock で Loaded イベントをサブスクライブする場合など、幅を明示的に設定すると、この動作は発生しないことがわかりました。
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 を使用するすべてのテキストブロックを適切にサイズ変更するという考えにもあまり熱心ではありません。