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

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

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

9 голосов
/ 12 марта 2009

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

3 голосов
/ 16 мая 2012

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

<StackPanel>
    <TextBlock Typography.Capitals="SmallCaps" FontFamily="Pescadero" Padding="2">2pm</TextBlock>
    <TextBlock Typography.Capitals="SmallCaps" FontWeight="Bold" Padding="2">2pm</TextBlock>
</StackPanel>
...