Как включить внешний шрифт в приложение WPF без его установки
Как включить внешний шрифт в приложение WPF без его установки
Я пробовал этот код
System.Drawing.Text.PrivateFontCollection privateFonts = new System.Drawing.Text.PrivateFontCollection();
privateFonts.AddFontFile("C:\\Documents and Settings\\somefont.ttf");
System.Drawing.Font font = new Font(privateFonts.Families[0], 12);
this.label1.Font = font;
Он корректно работает в приложении Windows Form, но не в WPF.
Ответы
Ответ 1
Я использую такой код XAML:
<Style x:Key="Hatten">
<Setter Property="TextElement.FontFamily" Value="Resources/#HATTEN" />
</Style>
#HATTEN - ссылка на файл hatten.tft в ресурсах.
Использование стиля:
<TextBlock x:Name="lblTitle" Style="{DynamicResource Hatten}" FontSize="72"></TextBlock>
Ответ 2
Это два способа сделать это. Один из способов - упаковать шрифты внутри приложения. Другой способ заключается в том, чтобы шрифты имели выходную папку отдельно. Разница в основном заключается в URI, который необходимо загрузить.
Пакет с приложением
- Добавьте папку
/Fonts
в ваше решение.
- Добавьте в эту папку файлы True Type Font (
*.ttf
)
- Включить файлы в проект
- Выберите шрифты и добавьте их в решение
-
Установите BuildAction: Resource
и Copy To Output Directory: Do not copy
. Теперь ваш файл .csproj
должен иметь такой раздел:
<ItemGroup>
<Resource Include="Fonts\NotoSans-Bold.ttf" />
<Resource Include="Fonts\NotoSans-BoldItalic.ttf" />
<Resource Include="Fonts\NotoSans-Italic.ttf" />
<Resource Include="Fonts\NotoSans-Regular.ttf" />
<Resource Include="Fonts\NotoSansSymbols-Regular.ttf" />
</ItemGroup>
-
В App.xaml
добавить <FontFamily>
Ресурсы. Он должен выглядеть в следующем примере кода. Обратите внимание, что URI не содержит имя файла при упаковке с приложением.
<Applicaton ...>
<Application.Resources>
<FontFamily x:Key="NotoSans">pack://application:,,,/Fonts/#Noto Sans</FontFamily>
<FontFamily x:Key="NotoSansSymbols">pack://application:,,,/Fonts/#Noto Sans Symbols</FontFamily>
</Application.Resources>
</Application>
-
Примените свои шрифты следующим образом:
<TextBlock x:Name="myTextBlock" Text="foobar" FontFamily="{StaticResource NotoSans}"
FontSize="10.0" FontStyle="Normal" FontWeight="Regular" />
-
Вы также можете установить шрифт императивно:
myTextBlock.FontFamily = new FontFamily(new Uri("pack://application:,,,/"), "./Fonts/#Noto Sans");
Копировать в выходной каталог
- Добавьте папку
/Fonts
в ваше решение.
- Добавьте в этот порядок файлы True Type Font (
*.ttf
)
- Включить файлы в проект
- Выберите шрифты и добавьте их в решение
-
Установите BuildAction: Content
и Copy To Output Directory: Copy if newer
. Теперь ваш файл .csproj
должен иметь такой раздел:
<ItemGroup>
<Content Include="Fonts\NotoSans-Bold.ttf">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Fonts\NotoSans-BoldItalic.ttf">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Fonts\NotoSans-Italic.ttf">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Fonts\NotoSans-Regular.ttf">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Fonts\NotoSansSymbols-Regular.ttf">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
-
В App.xaml
добавить <FontFamily>
Ресурсы. Он должен выглядеть в следующем примере кода. Обратите внимание, что URI не содержит имя файла при упаковке с приложением.
<Applicaton ...>
<Application.Resources>
<FontFamily x:Key="NotoSansRegular">./Fonts/NotoSans-Regular.tts#Noto Sans</FontFamily>
<FontFamily x:Key="NotoSansItalic">./Fonts/NotoSans-Italic.tts#Noto Sans</FontFamily>
<FontFamily x:Key="NotoSansBold">./Fonts/NotoSans-Bold.tts#Noto Sans</FontFamily>
<FontFamily x:Key="NotoSansBoldItalic">./Fonts/NotoSans-BoldItalic.tts#Noto Sans</FontFamily>
<FontFamily x:Key="NotoSansSymbols">./Fonts/NotoSans-Regular.tts#Noto Sans Symbols</FontFamily>
</Application.Resources>
</Application>
-
Примените свои шрифты следующим образом:
<TextBlock Text="foobar" FontFamily="{StaticResource NotoSansRegular}"
FontSize="10.0" FontStyle="Normal" FontWeight="Regular" />
Ссылки
Ответ 3
Лучший ответ на этот вопрос, который я нашел здесь
http://geekswithblogs.net/Martinez/archive/2010/01/29/custom-font-in-wpf-application.aspx
РЕШЕНИЕ
Он предполагает использование еще более злой строки, чем раньше, но работает как ожидалось:
<Label FontFamily="pack://application:,,,/Folder1/#Katana">Text</Label>
Где Folder1
- это папка вашего проекта, в которой вы сохраняете файл TTF.
Три примечания в конце:
-
'Katana - это имя шрифта, а не имя файла. Это существенное различие. Чтобы получить имя шрифта, просто дважды щелкните файл.
-
Не забудьте поставить знак хеша '# перед именем шрифта. Это не будет работать иначе.
-
Пользовательский шрифт также может быть добавлен в проект с надписью "Построение действия" в "Содержимое". Однако этого не рекомендуется, и для простоты я проигнорировал эту возможность.
Некоторые дополнительные ссылки
https://msdn.microsoft.com/en-us/library/ms753303(v=vs.100).aspx
https://msdn.microsoft.com/en-us/library/cc296385.aspx
Ответ 4
Я точно не нашел ответа.
Но я нашел решение, которое я не видел в Интернете.
Я следил за рекомендацией делать папку и маркировать все файлы внутри как Ресурсы.
Но мне нужно было перечислить их, и это была моя главная проблема, потому что мне нужно загрузить все на свой экран, не записывая имя где-нибудь. Я просто хочу, чтобы просто удалить другой шрифт в эту папку и перечислить его.
Я нашел это как решение для перечисления всех файлов в папке моих ресурсов/шрифтов
Fonts.GetFontFamilies(new Uri("pack://application:,,,/resources/fonts/#"))
Я надеюсь, что это поможет вам организовать ваши шрифты.
Ответ 5
Я использую xaml для этого
<Window
FontFamily ="./Fonts/#somefont"
>
Я включил файл шрифта в папку "Шрифты"
Ответ 6
У меня есть папка с шрифтами внутри папки с ресурсами в моем проекте. Во время сборки он скопирует эти шрифты в папку как содержимое. Затем я могу просто использовать следующий XAML, чтобы использовать шрифт FontAwesome, чтобы иметь значок на моей кнопке.
<Button Content="" FontFamily="./assets/fonts/#FontAwesome">
Ответ 7
Здесь Что для меня работало:
(1) Добавить каталог в проект: font
(2) Переместить файл шрифта ttf в каталог шрифтов
(3) Добавить файл шрифта ttf в проект
(4) Установите свойство "Build" файла шрифта tff в "Ресурс" (Примечание: я использовал "Ресурс" вместо "Встроенный ресурс", в выборе со списком.)
(5) Откройте окно, в котором вы используете шрифт, и сделайте следующие изменения:
<Window ... >
<Window.Resources>
<FontFamily x:Key="YourFontNickName">
pack://application:,,,/font/#NameOfFont
<!-- Note: NameOfFont can be font by double clicking
on font from explorer and writing down name
of the font reported. Its not the same
as the file name -->
</FontFamily>
</Window.Resources>
<!-- Use font as Xaml -->
<StackPanel>
<Textblock FontFamily="{StaticResource YourFontNickName}">
This is a test
</Testblock>
<Textblock Name="text1"/>
</StackPanel>
...
</Window>
(6) Если вы хотите изменить шрифт из кода. Сделайте это:
public partial class Window1 : Window {
// Use font as C# Code
public void UpdateText1() {
text1.Text = "Hi There";
FontFamily ff = this.Resources["YourFontNickName"]
as FontFamily;
if (ff == null) {
Messagebox.Show("Wrong Font Name", "ERROR");
return;
}
text1.FontFamily = ff;
text1.FontSize = 30;
}
...
}
Ответ 8
Я пытался заставить это работать с другим шрифтом,
он работал только для меня в этом формате с. /Fonts
<FontFamily x:Key="NotoSans">pack://application:,,,./Fonts/#Noto Sans</FontFamily>
Ответ 9
Сначала) Скопируйте шрифты в папку проекта, например /Resources/Fonts/
, и установите свойства шрифта → Действие сборки: ресурс
Второе) Используется в коде
FontFamily="/AssemblyNamespace;component/Resources/Fonts/IranSans/#IRANSansWeb Medium"
![enter image description here]()
Ответ 10
Вам необходимо добавить шрифты в качестве элемента ресурса
по ссылке; Вы можете добавить нужный шрифт в качестве файла ресурсов приложения, выполнив следующие действия:
Скопируйте файл шрифта в любое место вашего проекта. В большинстве случаев файлы ресурсов копируются в папку с именем "resources", если вы хотите выполнить это, создайте новую папку в своем проекте и назовите ее "resources", затем скопируйте файл шрифта, который обычно в эту папку помещается формат ttf или otf
затем вам нужно объявить этот файл как файл ресурсов, для этого у вас есть два варианта:
- щелкните правой кнопкой мыши по файлу шрифта, выберите свойства (или нажмите F4 после выбора)
а затем измените "Build Action" на "Ресурс"
перейдите в каталог проектов, отредактируйте файл project-name.csproj
и
следующий тег:
<ItemGroup>
<Resource Include="resources\<font-file-name>.ttf" />
</ItemGroup>'''
наконец, в вашем приложении вы можете установить свойство font-family следующим образом:
FontFamily="./Resources/Fonts/#<font-name>"
будьте осторожны, 'font-name' отличается от font-file-name. Вы можете открыть файл шрифта и проверить свойство имени шрифта (в Microsoft Window)
![fetching font name by opening font file]()
Ответ 11
Самый простой способ включить внешние шрифты - это
Шаг 1. Создайте папку Fonts
и добавьте в нее свои шрифты.
![enter image description here]()
Шаг 2. Установите для параметра "Создать" значение content
и для параметра "Копировать в выходной каталог" значение Copy always
.
![enter image description here]()
Шаг 3. Постройте решение, чтобы обновить его с помощью каталога Font.
Шаг 4. Используйте шрифт в ваших элементах, используя FontFamily="Fonts/#font name"
![enter image description here]()
Все готово!
Благодаря науке !