如何在不安装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;
Run Code Online (Sandbox Code Playgroud)
它在Windows窗体应用程序中正常工作,但在WPF中没有.
Mov*_*GP0 95
这有两种方法.一种方法是将字体打包在应用程序中.另一种方法是将字体分别输出到输出文件夹.差异主要是加载文件所需的URI.
/Fonts
在解决方案中添加一个文件夹.*.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>
Run Code Online (Sandbox Code Playgroud)在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>
Run Code Online (Sandbox Code Playgroud)像这样应用你的字体:
<TextBlock x:Name="myTextBlock" Text="foobar" FontFamily="{StaticResource NotoSans}"
FontSize="10.0" FontStyle="Normal" FontWeight="Regular" />
Run Code Online (Sandbox Code Playgroud)您还可以强制设置字体:
myTextBlock.FontFamily = new FontFamily(new Uri("pack://application:,,,/"), "./Fonts/#Noto Sans");
Run Code Online (Sandbox Code Playgroud)/Fonts
在解决方案中添加一个文件夹.*.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>
Run Code Online (Sandbox Code Playgroud)在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>
Run Code Online (Sandbox Code Playgroud)像这样应用你的字体:
<TextBlock Text="foobar" FontFamily="{StaticResource NotoSansRegular}"
FontSize="10.0" FontStyle="Normal" FontWeight="Regular" />
Run Code Online (Sandbox Code Playgroud)小智 24
我使用这样的XAML代码:
<Style x:Key="Hatten">
<Setter Property="TextElement.FontFamily" Value="Resources/#HATTEN" />
</Style>
Run Code Online (Sandbox Code Playgroud)
#HATTEN - 参考资源中的hatten.tft.
使用风格:
<TextBlock x:Name="lblTitle" Style="{DynamicResource Hatten}" FontSize="72"></TextBlock>
Run Code Online (Sandbox Code Playgroud)
Dev*_*per 18
我在这里找到的这个问题的最佳答案
http://geekswithblogs.net/Martinez/archive/2010/01/29/custom-font-in-wpf-application.aspx
解决方案 它涉及使用比以前更邪恶的字符串,但按预期工作:
<Label FontFamily="pack://application:,,,/Folder1/#Katana">Text</Label>
Run Code Online (Sandbox Code Playgroud)
哪里Folder1
是你保持一个TTF文件的项目的文件夹中.最后三个笔记:
'Katana'是字体的名称,而不是文件的名称.这是显着的差异.要获取字体的名称,只需单击该文件两次.
请记住在字体名称前加上井号"#".否则它将不起作用.
自定义字体也可以添加到项目中,并将"构建操作"设置为"内容".然而,这不是推荐的方法,为了简单起见,我忽略了这种可能性.
一些额外的链接
https://msdn.microsoft.com/en-us/library/ms753303(v=vs.100).aspx
https://msdn.microsoft.com/en-us/library/cc296385.aspx
我没有找到任何答案.但我找到了一个我没有在互联网上看到的解决方案.
我遵循建议做一个文件夹并将所有文件标记为资源.但我需要枚举它们,这是我的主要问题,因为我需要将所有内容加载到我的屏幕而不在某处记录名称.我只想简单地将另一种字体拖放到该文件夹并列出它.
我发现这是一个列出resources/fonts文件夹中所有文件的解决方案
Fonts.GetFontFamilies(new Uri("pack://application:,,,/resources/fonts/#"))
Run Code Online (Sandbox Code Playgroud)
我希望它能帮助你整理字体.
归档时间: |
|
查看次数: |
52706 次 |
最近记录: |