WPF/XAML: типография. Капиталы, кажется, не имеют никакого эффекта

Все эти фрагменты текста выглядят одинаково, но я пытаюсь заставить их выглядеть по-другому. Я хочу маленькие заглавные буквы текста. Что мне здесь не хватает, чтобы заставить работать эффект типографики?

Чтобы воспроизвести это, откройте 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.

2 ответа

Решение

Это работает только с определенными шрифтами OpenType - пример в справке использует Pescadero, который находится в образце открытого типа. Даже тогда поддерживаются только SmallCaps и AllSmallCaps.

Я заметил, что шрифт по умолчанию с "жирным" шрифтом действительно правильно отображает SmallCaps:

<StackPanel>
    <TextBlock Typography.Capitals="SmallCaps" FontFamily="Pescadero" Padding="2">2pm</TextBlock>
    <TextBlock Typography.Capitals="SmallCaps" FontWeight="Bold" Padding="2">2pm</TextBlock>
</StackPanel>
Другие вопросы по тегам