WPF C# Setting Font Family of Text Block - c#

I am looking for the correct sytanx for setting a custom defined font in the xaml.cs file. In the .xaml file, I can successfully do this:
<TextBlock FontFamily="Resources/#Charlemagne Std" FontSize="22" ... />
However, I cannot seem to get the same thing to work in the .xaml.cs file. I have tried something to this effect:
TextBlock tb = new TextBlock();
tb.FontFamily = new FontFamily(new Uri("pack://application:,,,/"), "#Charlemagne Std");
The font is in the Resources folder of my project folder. The name of the font is Charlemagne Std, and the name of the font file is chalemagnestd-regular.otf.
There were no compile errors, but the font showing does not seem to be correct.
Thanks for all the help

If the font is in a subfolder of the project folder, you'll need to include that folder path when constructing the FontFamily object. Use:
new FontFamily(new Uri("pack://application:,,,/"), "./Resources/#Charlemagne Std");
For more information, see Packaging Fonts with Applications on MSDN.

Related

How to add new font to label in WPF?

I need to use a pixel font "8bitoperator_jve" in label in WPF from https://ru.fonts2u.com/8bitoperator-jve-regular.%D1%88%D1%80%D0%B8%D1%84%D1%82. I've downloaded .ttf file with font and put it to Resources, set 'Resource' in Build Action and tried the following code:
<Label FontFamily="./#8bitoperator_jve" FontSize="100" Foreground="White"> Check </Label>
It wouldn't work. How can I fix it?
I suggest you use it directly after installation
this.label1.FontFamily = new FontFamily("8bitoperator JVE Regular");
You are inserting an incorrect font name. You must enter the actual font name, not the filename. Open the font and copy the Font name. Try this:
<Label FontFamily="./#8bitoperator JVE" FontSize="100" Foreground="White"> Check </Label>
I'm not sure if ./ is correct, if the code above won't work, try to remove this and leave just #8bitoperator JVE

I can not seem to reach .resx WPF

I have a WPF c# project, and I created two .resx files for changing the language.
I've set Access Modifier: Public
Added in .xaml
xmlns:resx="clr-namespace:Management_Software.Properties"
When I try to access a string with {x:Static resx:...} I see only a .settings file .
Do I have to add the .resx files in App.config,App.xaml ?
in order to use resoiurces you have to:
1. Include resource file in xaml like
xmlns:resource ="clr-namespace:WpfApplication1.Strings.en_US"
2.You can use it with binding like:
<TextBlock Text="{x:Static resource:Resource1.Greeting}" />
if you do these things try to rebuild the project. Xaml cannot figure out that you included new file and generates an error.
In my resource file I have:
Name = Greeting
Value = Sample test
Hope this helps.

WPF - Import custom fonts in C#

I would like to import custom fonts on my WPF application so that they work without having the client to install them.
All the answers I have found so far are in XAML, I would like to do it only in C#.
My fonts are in Resources/Fonts/.
I have already tried this :
Fonts.GetFontFamilies(new Uri("pack://application:,,,/Resources/Fonts/#"));
But it didn't work.
I did everything bluetoothfx said but it still did not work.
Then I changed the Build action of my fonts (it was to Content), to Embedded Resource, and it worked. Resource works also for me.
Thanks anyway.
I think the way that you are working will not work.
At first create a folder name fonts then Add the font to your project, change its Build Action to Content.
Now you need to find the internal name (Real name) of the font not the font-file name. You can have it by opening the font file and you can see it on top.
Now edit App.xaml
<Application.resources>
<style x:key="MYFONT_INTERNAL_NAME">
<setter property="TextElement.FontFamily"
value="pack://application:,,,/fonts/#MYFONT_INTERNAL_NAME" />
</style>
Now use it in your code like:
<TextBlock Style="{StaticResource MYFONT_INTERNAL_NAME}" FontSize="16" Text="Font Style" />
To know more search here:
http://www.alteridem.net/2014/02/24/custom-fonts-in-wpf-applications/

Adding custom font in silverlight

I tried to add google font to my silverlight project. so i downloaded the zip and added the fonts to Fonts folder:
I tried to load it like this:
<controls:DynamicTextBlock Grid.Column="2"
Width="200"
HorizontalAlignment="Left"
FontSize="{StaticResource FontSize6}"
FontFamily="/EZTrader;Component/Fonts/#RobotoLight"
Foreground="White"
Text="{Binding UserFullName}"
ToolTipService.ToolTip="{Binding UserFullName}" />
and nothing happened.
what should i do to fix this?
thanks!
If you are using windows, Open the font you want to use with Windows Font Viewer
Check the Font name:. That name is what you will use when referencing it. Note: the font name may not always match the filename of the .ttf and can also include spaces.
You want to make sure that the `Build Action' of the included file in the project is set to Resource as you want to be able to reference it from xaml.
You can create a static resource for the FontFamily in your App.xaml so you can reference it throughout your project.
Assuming the name of the assembly for your project is EzTrader.dll
<FontFamily x:Key="RobotoLightFontFamily">/EzTrader;component/Fonts/RobotoLight.ttf#[Font name here]</FontFamily>
<FontFamily x:Key="RobotoThinFontFamily">/EzTrader;component/Fonts/Roboto-Thin.ttf#[Font name here]</FontFamily>
<!-- other font resources -->
Then build the project.
From there you should be able to reference it like so
<controls:DynamicTextBlock Grid.Column="2"
Width="200"
HorizontalAlignment="Left"
FontSize="{StaticResource FontSize6}"
FontFamily="{StaticResource RobotoLightFontFamily}"
Foreground="White"
Text="{Binding UserFullName}"
ToolTipService.ToolTip="{Binding UserFullName}" />
Reference:
How to use your own fonts within Silverlight
Using Custom Fonts in Silverlight
Using built-in, embedded and streamed fonts in Silverlight
If you can, check what the display name of the font is, instead of the file name for the part after the #. It may actually be Roboto Light.
<controls:DynamicTextBlock FontFamily="/EZTrader;component/Fonts/RobotoLight.ttf#Roboto Light" />
You may also need to change the build properties on your font file as seen here: http://geekswithblogs.net/mamta_m/archive/2010/07/01/adding-custom-fonts-to-your-silverlight-application.aspx.

How to include external font in WPF application without installing it

How to include external font in WPF application without installing it
I tried this code
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;
It working correctly in Windows Form Application but not in WPF.
There are two ways of doing this: One way is to package the fonts inside the application. The other way is to have the fonts in a folder. The difference is mostly the URI you need to load the files with.
Package with Application
Add a /Fonts folder to your solution.
Add the True Type Fonts (*.ttf) files to that folder
Include the files to the project
Select the fonts and add them to the solution
Set BuildAction: Resource and Copy To Output Directory: Do not copy. Your .csproj file should now have a section like this one:
<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>
In App.xaml add <FontFamily> resources. It should look like in the following code sample. Note that the URI doesn't contain the filename when packing with the application.
<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>
Apply your fonts like this:
<TextBlock x:Name="myTextBlock" Text="foobar" FontFamily="{StaticResource NotoSans}"
FontSize="10.0" FontStyle="Normal" FontWeight="Regular" />
You can also set the font imperatively:
myTextBlock.FontFamily = new FontFamily(new Uri("pack://application:,,,/"), "./Fonts/#Noto Sans");
Copy to Output Directory
Add a /Fonts folder to your solution.
Add the True Type Fonts (*.ttf) files to that order
Include the files to the project
Select the fonts and add them to the solution
Set BuildAction: Content and Copy To Output Directory: Copy if newer or Copy always. Your .csproj file should now have a section like this one:
<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>
In App.xaml add <FontFamily> resources. It should look like in the following code sample.
<Applicaton ...>
<Application.Resources>
<FontFamily x:Key="NotoSansRegular">./Fonts/NotoSans-Regular.ttf#Noto Sans</FontFamily>
<FontFamily x:Key="NotoSansItalic">./Fonts/NotoSans-Italic.ttf#Noto Sans</FontFamily>
<FontFamily x:Key="NotoSansBold">./Fonts/NotoSans-Bold.ttf#Noto Sans</FontFamily>
<FontFamily x:Key="NotoSansBoldItalic">./Fonts/NotoSans-BoldItalic.ttf#Noto Sans</FontFamily>
<FontFamily x:Key="NotoSansSymbols">./Fonts/NotoSans-Regular.ttf#Noto Sans Symbols</FontFamily>
</Application.Resources>
</Application>
Apply your fonts like this:
<TextBlock Text="foobar" FontFamily="{StaticResource NotoSansRegular}"
FontSize="10.0" FontStyle="Normal" FontWeight="Regular" />
References
MSDN: Packaging Fonts with Applications
I use such XAML code:
<Style x:Key="Hatten">
<Setter Property="TextElement.FontFamily" Value="Resources/#HATTEN" />
</Style>
#HATTEN - reference to hatten.tft in Resources.
Using the Style:
<TextBlock x:Name="lblTitle" Style="{DynamicResource Hatten}" FontSize="72"></TextBlock>
The best answer to this question I found here
http://geekswithblogs.net/Martinez/archive/2010/01/29/custom-font-in-wpf-application.aspx
SOLUTION
It involves using even more wicked string than before but works as expected:
<Label FontFamily="pack://application:,,,/Folder1/#Katana Sans">Text</Label>
Where is Folder1 is a folder of your project where you keep a TTF file.
Three notes at the end:
‘Katana Sans’ is the name of the font, not the name of the file. This is significant difference. To get the name of the font simply click the file twice. Note that spaces are included without any changes in this string.
Remember to put the hash sign ‘#’ in front of font name. It will not work otherwise.
Custom font may also be added to the project with ‘Build Action’ set to ‘Content’. This is not recommended approach however and for the sake of simplicity I ignored this possibility.
Some extra links
https://msdn.microsoft.com/en-us/library/ms753303(v=vs.100).aspx
https://msdn.microsoft.com/en-us/library/cc296385.aspx
The easiest way to include external fonts is to
Step 1. Create the folder Fonts And add your fonts into it.
Step 2. Set Build action to content and Copy to Output Directory to Copy always.
Step 3. Build the Solution to update it with the Font directory.
Step 4. Use the font in your elements using FontFamily="Fonts/#font name"
All Done!
Thanks to cscience !
I did not found any answer for exactly that.
But I found a solution that I did not saw on Internet.
I followed a recommendation of doing a folder and marking all the files inside as Resources.
But I needed to enumerate them, and that was my main problem, because I need to load all to my screen without recording the name somewhere. I just want to simple drop another font to that folder and list it.
I found this as a solution to list all the files inside my resources/fonts folder
Fonts.GetFontFamilies(new Uri("pack://application:,,,/resources/fonts/#"))
I expect it to help you organize your fonts.
I use xaml for this
<Window
FontFamily ="./Fonts/#somefont"
>
I included the font file inside the "Fonts" folder
First) Copy fonts to project folder like /Resources/Fonts/ and set font-properties -> Build Action:Resource
Second) Used on code
FontFamily="/AssemblyNamespace;component/Resources/Fonts/IranSans/#IRANSansWeb Medium"
Although the solution from #movgp0 worked at first, it failed when I wanted a Bold text. By searching a bit more online I found the following solution that works in all cases:
<Application.Resources>
<FontFamily x:Key="FiraSansBold">Fonts/FiraSansCondensed-Bold.ttf#Fira Sans Condensed</FontFamily>
<FontFamily x:Key="FiraSansBoldItalic">Fonts/FiraSansCondensed-BoldItalic.ttf#Fira Sans Condensed</FontFamily>
<FontFamily x:Key="FiraSansItalic">Fonts/FiraSansCondensed-Italic.ttf#Fira Sans Condensed</FontFamily>
<FontFamily x:Key="FiraSans">Fonts/FiraSansCondensed-Regular.ttf#Fira Sans Condensed</FontFamily>
</Application.Resources>
Usage: <Label FontFamily="{StaticResource FiraSansBold}">SomeBoldedLabel</Label>
I have a fonts folder inside an assets folder in my project. At build time it will copy those fonts into the folder as content. Then I can simply use the following XAML to use the FontAwesome font to have an icon on my button.
<Button Content="" FontFamily="./assets/fonts/#FontAwesome">
Here's What Worked for me:
(1) Add Directory to project: font
(2) Move ttf font file into font directory
(3) Add ttf font file to project
(4) Set the "Build" Property of the tff font file to "Resource"
(Note: I used "Resource" instead of "Embedded Resource"
in the combobox selection.)
(5) Open the Window where you are using the font and make the
following changes:
<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) If you want to change the font from code. Do this:
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;
}
...
}
You need to add fonts as resource item
according to the link; you may add your desired font as application resource file by following these steps:
copy your font file to anywhere in your project in most cases resource files is copied into a folder named "resources" if you want to follow this, create new folder in your project and name it as "resources" then copy your font file which is usually have ttf or otf format into that folder
then you need to declare this file as a resource file for doing so you have two options:
right click on your font file, select properties (or press F4 after selecting it)
and then change "Build Action" to "Resource"
go into your projects directory edit project-name.csproj file and the
following tag:
<ItemGroup>
<Resource Include="resources\<font-file-name>.ttf" />
</ItemGroup>```
finally within you application you may set font-family property like this:
FontFamily="./Resources/Fonts/#<font-name>"
be careful 'font-name' is different from font-file-name you may open font file and check for font name property (in Microsoft Window)
I was trying to get this to work as well with a different font,
it only worked for me in this format with the ./Fonts
<FontFamily x:Key="NotoSans">pack://application:,,,./Fonts/#Noto Sans</FontFamily>
Kind of, Really easy:
<TextBlock x:Name="lblTitle" FontSize="24" Margin="256,25,178,289" Text="gg" FontFamily="/FontTest;component/#Arvo"></TextBlock>
When you import a font, vs will gonna include it in font list😊.

Categories