C# 使用Font Awesome更改WPF中的字体图标
我正在使用Font Awesome的图标在我的C#WPF应用程序中呈现基本的字体图像。在运行时,我尝试更改TextBlock以显示不同的字体图标,但显示的是unicode表示而不是字体图标 我创建了一个示例应用程序来显示这一点。单击其中一个按钮时,它将用相应图标的unicode替换TextBlock的Text属性。项目中有一个资源文件夹,其中字体文件作为TextBlock的FontFamily属性引用的生成资源 以下是我的示例应用程序的源代码: 代码隐藏:C# 使用Font Awesome更改WPF中的字体图标,c#,wpf,xaml,fonts,font-awesome,C#,Wpf,Xaml,Fonts,Font Awesome,我正在使用Font Awesome的图标在我的C#WPF应用程序中呈现基本的字体图像。在运行时,我尝试更改TextBlock以显示不同的字体图标,但显示的是unicode表示而不是字体图标 我创建了一个示例应用程序来显示这一点。单击其中一个按钮时,它将用相应图标的unicode替换TextBlock的Text属性。项目中有一个资源文件夹,其中字体文件作为TextBlock的FontFamily属性引用的生成资源 以下是我的示例应用程序的源代码: 代码隐藏: namespace FontAweso
namespace FontAwesomeTest
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void btnGlass_Click(object sender, RoutedEventArgs e)
{
tblkFontIcon.Text = "";
}
private void btnMusic_Click(object sender, RoutedEventArgs e)
{
tblkFontIcon.Text = "";
}
private void btnSearch_Click(object sender, RoutedEventArgs e)
{
tblkFontIcon.Text = "";
}
}
}
XAML:
玻璃
音乐
搜寻
;
;
;
;
我使用了下面的教程将Fontawesome合并到我的应用程序中
因此,从本质上讲,我如何改变图标,但有一个图标显示-而不是Unicode
提前感谢。更新
我找到了一篇关于这个主题的不同帖子--
我认为这应该更符合你的要求
确保将字体添加为资源。然后,使用以下命令
字符串:
<Setter Property="TextElement.FontFamily" Value="pack://application:,,,/fonts/#FontAwesome" />
而不是
tblkFontIcon.Text = "";
如果您使用的代码来自
然后你可能错过了那篇文章中的“它是如何工作的”部分。
您应该使用该标记扩展,而不是使用TextBlock.Text属性
在他的示例代码中:
<RibbonButton Label="Import data"
LargeImageSource="{WpfTools:ImageFromFont Text=,
FontFamily=/RibbonFontIconSample;component/Resources/#FontAwesome, Brush=Brown}" />
到ImageSource
并分配给LargeImageSource
属性
因此,在xaml中,您可以用图像
替换文本块
,然后它应该是这样的:
<Image Source="{WpfTools:ImageFromFont Text=,
FontFamily=/RibbonFontIconSample;component/Resources/#FontAwesome, Brush=Brown}" />
Font Awesome具有名为FontAwesome.UWP和FontAwesome.WPF的NuGet包。只需下载其中一个 如果要使用图标导入,请在XAML代码中遵循名称空间:
xmlns:fa=”http://schemas.fontawesome.io/icons/"
将其用于按钮,如下所示:
最后,在你的C#代码背后:
使用FontAwesome.WPF;//在代码的顶部
btnButton.Content=FontAwesomeIcon.LongArrowRight;
简单且非常容易:
你应该在你的系统上安装fontawesome字体,使用它如下
<Button Content="" FontFamily="FontAwesome" FontSize="32" />
如何组合图标,{}{FontAwesome图标代码}例如地址簿的
要查找代码列表,请先转到或——感谢您的快速响应!您提供的更新是我当前在WPF应用程序中使用字体的方式。正如问题所述,它目前可以工作,但在我更改Text属性时,即使我将其更改为相同的Unicode,它也会显示Unicode。我试着把这些图片包括进去,但没有足够的“街头信誉”。至于使用字体图标部分,我不知道如何根据需要在运行时使用它来更改图标。我可以在设计/构建期间让它工作。我认为应该使用unicode字符串设置文本,而不是使用“;”设置文本。我已经更新了,您可以按照该代码将TextBlock.text更改为另一个unicode字符串,这应该可以工作。因为“;”是xaml版本的“unicode,xaml解析器将其转换为对应的unicode字符串,即c#中的“\uf000”,并将其设置为
tblkFontIcon.Text
。这是一种非常好的方法,可以方便地使用fontawesome。对于相同的xaml,我必须使用以下代码:(btnButton.Content as ImageAwesome)。Icon=FontAwesomeIcon.LongArrowRight代码>谢谢,非常有用的步骤。所有其他帖子都遗漏了“如果您将使用图标导入,请跟随名称空间到XAML代码中:”。或者您的标记无法生成/编译。使用此软件包时如何设置图像源?@paul您的意思是什么?这是一个图标字体。你需要这个代码。这样可以避免您手动键入Unicode:
{WpfTools:ImageFromFont Text=,
FontFamily=/RibbonFontIconSample;component/Resources/#FontAwesome, Brush=Brown}
<Image Source="{WpfTools:ImageFromFont Text=,
FontFamily=/RibbonFontIconSample;component/Resources/#FontAwesome, Brush=Brown}" />
private static ImageSource CreateGlyph(string text,
FontFamily fontFamily, FontStyle fontStyle, FontWeight fontWeight,
FontStretch fontStretch, Brush foreBrush)
{
if (fontFamily != null && !String.IsNullOrEmpty(text))
{
Typeface typeface = new Typeface(fontFamily, fontStyle, fontWeight, fontStretch);
GlyphTypeface glyphTypeface;
if (!typeface.TryGetGlyphTypeface(out glyphTypeface))
throw new InvalidOperationException("No glyphtypeface found");
ushort[] glyphIndexes = new ushort[text.Length];
double[] advanceWidths = new double[text.Length];
for (int n = 0; n < text.Length; n++)
{
ushort glyphIndex = glyphTypeface.CharacterToGlyphMap[text[n]];
glyphIndexes[n] = glyphIndex;
double width = glyphTypeface.AdvanceWidths[glyphIndex] * 1.0;
advanceWidths[n] = width;
}
GlyphRun gr = new GlyphRun(glyphTypeface, 0, false, 1.0, glyphIndexes,
new Point(0, 0), advanceWidths,
null, null, null, null, null, null);
GlyphRunDrawing glyphRunDrawing = new GlyphRunDrawing(foreBrush, gr);
return new DrawingImage(glyphRunDrawing);
}
return null;
}
<Button Content="" FontFamily="FontAwesome" FontSize="32" />