WPF/XAML:Typography.Capitals似乎没有任何效果

7

所有这些文本看起来都是一样的,但我想让它们看起来不同。我想要小型大写字母文本。我缺少什么来使小型大写字母排版效果生效?

要复制此问题,请打开Visual Studio 2008,选择“文件”|“新建项目”,创建一个新的“Windows”|“WPF应用程序”,将下面的标记粘贴到Window1.xaml中,然后运行它。

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <FlowDocumentReader>
        <FlowDocument>
            <Paragraph>
                <Run>Some text</Run> <LineBreak />
                <Run Typography.Capitals="SmallCaps">Some text</Run> <LineBreak />
                <Run Typography.Capitals="AllSmallCaps">Some text</Run> <LineBreak />
                <Run Typography.Capitals="PetiteCaps">Some text</Run> <LineBreak />
                <Run Typography.Capitals="AllPetiteCaps">Some text</Run> <LineBreak />
            </Paragraph>
        </FlowDocument>
        </FlowDocumentReader>
    </Grid>
</Window>   

根据第一个答案,如果您指定特定的字体,可能会有所帮助。将 FlowDocument 的开始标签更改为:
   <FlowDocument FontFamily="Palatino Linotype">

你可以使用SmallCaps和AllSmallCaps,但不能使用PetiteCaps或AllPetiteCaps。这取决于字体。但是这引发了其他问题:

  • 为什么默认字体(看起来很像Times New Roman)不支持这些?
  • 其他广泛使用的字体(例如本地Courier New等)是否支持这些?
  • 有没有支持什么的字体列表?
  • 百分之多少的字体会支持这个功能 - 大多数、一些还是很少?
  • 你能在代码中确定字体支持什么吗?如果是这样,我可以伪造AllSmallCaps - 例如将文本转换为所有大写字母并缩小80%。但不是SmallCaps。

好问题。那是帮助文档中最基本的例子,但它并不起作用。 - Ray
2个回答

9

这仅适用于特定的OpenType字体 - 帮助示例使用了Open Type样本中的Pescadero字体。即使如此,也只支持小型大写字母和全小写字母。


4
我注意到,默认字体使用“粗体”字重时,SmallCaps 字母无法正确显示:
<StackPanel>
    <TextBlock Typography.Capitals="SmallCaps" FontFamily="Pescadero" Padding="2">2pm</TextBlock>
    <TextBlock Typography.Capitals="SmallCaps" FontWeight="Bold" Padding="2">2pm</TextBlock>
</StackPanel>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接