Ответ 1
ОБНОВИТЬ
Я нашел другое сообщение для этой темы - Добавить значок шрифта в wpf Я думаю, что это будет более вероятно, что вы хотите.
Убедитесь, что ваш шрифт добавлен в качестве ресурса. Затем используйте следующую строку:
<Setter Property="TextElement.FontFamily" Value="pack://application:,,,/fonts/#FontAwesome" />
В приведенной выше строке я предполагаю, что имя шрифта (а не имя файла шрифта) - FontAwesome.
Вам просто нужно:
- Добавьте шрифт в свой проект, скажем, вы поместили их в папку "Шрифты",
- Изменение действия сборки для ресурса, а не встроенного ресурса
- Добавьте свой стиль, чтобы установить семейство шрифтов, например, снимок кода выше, и установите
TextBlock.Text
на понравившемся значке и примените стиль к TextBlock.
Если вы хотите изменить значок, обновив свойство TextBlock.Text
, вы должны установить свойство Text
с поддерживаемой строкой unicode.
Попробуйте что-нибудь вроде
tblkFontIcon.Text = "\uf000";
скорее, чем
tblkFontIcon.Text = "";
Если вы используете код из " Использование значков шрифтов"
то вы, вероятно, пропустили раздел "Как это работает" в этом сообщении. Вы должны использовать это расширение разметки, а не использовать свойство TextBlock.Text.
В своем примере кода:
<RibbonButton Label="Import data"
LargeImageSource="{WpfTools:ImageFromFont Text=,
FontFamily=/RibbonFontIconSample;component/Resources/#FontAwesome, Brush=Brown}" />
обратите внимание на WpfTools:ImageFromFont
, это расширение разметки, оно позволяет анализатору xaml преобразовывать
{WpfTools:ImageFromFont Text=,
FontFamily=/RibbonFontIconSample;component/Resources/#FontAwesome, Brush=Brown}
к ImageSource
и присвоен LargeImageSource
.
Итак, в вашем xaml вы можете заменить TextBlock
на Image
, тогда это должно быть что-то вроде:
<Image Source="{WpfTools:ImageFromFont Text=,
FontFamily=/RibbonFontIconSample;component/Resources/#FontAwesome, Brush=Brown}" />
Если вы хотите изменить значок, вам придется самостоятельно изменить ImageSource
, просто следуйте ImageSource
" Использование шрифтов", чтобы создать свой собственный метод или просто скопируйте следующий код из этого учебника.
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;
}