C# 使用Font Awesome更改WPF中的字体图标

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

我正在使用Font Awesome的图标在我的C#WPF应用程序中呈现基本的字体图像。在运行时,我尝试更改TextBlock以显示不同的字体图标,但显示的是unicode表示而不是字体图标

我创建了一个示例应用程序来显示这一点。单击其中一个按钮时,它将用相应图标的unicode替换TextBlock的Text属性。项目中有一个资源文件夹,其中字体文件作为TextBlock的FontFamily属性引用的生成资源

以下是我的示例应用程序的源代码:

代码隐藏:

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 = "&#xf000;";
如果您使用的代码来自 然后你可能错过了那篇文章中的“它是如何工作的”部分。 您应该使用该标记扩展,而不是使用TextBlock.Text属性

在他的示例代码中:

<RibbonButton Label="Import data" 
  LargeImageSource="{WpfTools:ImageFromFont Text=&#xf01a;, 
  FontFamily=/RibbonFontIconSample;component/Resources/#FontAwesome, Brush=Brown}" />
ImageSource
并分配给
LargeImageSource
属性

因此,在xaml中,您可以用
图像
替换
文本块
,然后它应该是这样的:

<Image Source="{WpfTools:ImageFromFont Text=&#xf000;, 
      FontFamily=/RibbonFontIconSample;component/Resources/#FontAwesome, Brush=Brown}" />

Font Awesome具有名为FontAwesome.UWPFontAwesome.WPF的NuGet包。只需下载其中一个

如果要使用图标导入,请在XAML代码中遵循名称空间:

xmlns:fa=”http://schemas.fontawesome.io/icons/"
将其用于按钮,如下所示:


最后,在你的C#代码背后:

使用FontAwesome.WPF;//在代码的顶部
btnButton.Content=FontAwesomeIcon.LongArrowRight;
简单且非常容易:

你应该在你的系统上安装fontawesome字体,使用它如下

<Button Content="&#xf0e4;" FontFamily="FontAwesome" FontSize="32" />

如何组合图标,{&#x}{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=&#xf01a;, 
      FontFamily=/RibbonFontIconSample;component/Resources/#FontAwesome, Brush=Brown}
<Image Source="{WpfTools:ImageFromFont Text=&#xf000;, 
      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="&#xf0e4;" FontFamily="FontAwesome" FontSize="32" />