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>