WPF使用TextFormattingMode =“显示”和连字符测量文本宽度不正确

时间:2013-06-03 15:14:21

标签: wpf text formatting gdi textblock

您可以在此处查看问题以及如何重现:

Missing Word Issue

该问题导致在文本块中最长行的末尾切断单词。请注意,上一个TextBlock缺少单词“animals”。

是否有人知道此问题的解决方法?或者有关它的任何信息?我需要基本上保持第二个TextBlock的呈现和布局行为 - 但只是出现所有单词。

XAML复制代码:

<Window x:Class="TextWeirdness.Application.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel>

        <StackPanel.Resources>
            <Style TargetType="TextBlock">
                <Setter Property="Text" Value="{Binding Text, ElementName=ATextBox}"/>
                <Setter Property="FontSize" Value="{Binding Value, ElementName=ASlider}"/>
                <Setter Property="FontFamily" Value="Arial"/>
                <Setter Property="HorizontalAlignment" Value="Left"/>
                <Setter Property="TextWrapping" Value="Wrap"/>
            </Style>
        </StackPanel.Resources>

        <Slider Name="ASlider" Minimum="1" Maximum="30" Value="12" />
        <TextBox Name="ATextBox" Text="I love mules - best of all the animals" AcceptsReturn="True"/>

        <TextBlock />
        <TextBlock TextOptions.TextFormattingMode="Display"/>
    </StackPanel>
</Window>

更多信息:

  • 问题仅在文本中出现连字符(仅限减号)时发生。
  • 仅当字体大小在特定的重复范围内时才会发生(我不知道那是什么)。
  • 仅适用于某些字体。
    • Arial字体
    • Buxton Sketch
    • 宋体
    • Calibri Light
    • 坎布里亚
    • Cambria Math
    • 康士坦奇亚
    • 牛腿
    • DokChampa
    • 尤菲米娅
    • Global Monospace
    • Global Sans Serif
    • Global Serif
    • 蒙古语Baiti
    • 尼亚拉
    • Palatino Linotype
    • Times New Roman

2 个答案:

答案 0 :(得分:1)

如果可以删除

<Setter Property="TextWrapping" Value="Wrap"/>

然后这将作为解决方法......

这是一个错误,您应该通过Microsoft Connect网站进行报告,但不要轻易将其解决。事实上它可能永远不会得到修复。

我的经验表明,在过去的几年中,微软需要6个多月的时间才能做出回应(如果有的话),大多数错误将被归类为“按设计”或者如果您在“微软有更好的事情要做”之间阅读。修复错误“。我的估计将有<5%的可能性由.NET 5.0修复

答案 1 :(得分:1)

我们遇到了同样的问题。我们的客户能够自定义字体系列和大小,其中一些报告缺少单词。

我们选择的解决方法是用&amp;#8208;替换默认的连字符/减号。 unicode字符。这在标点符号意义上似乎是正确的,但无论如何都有点麻烦。这就是我们考虑自动检查和更新构建服务器上所有resx文件的原因。