组合框列表中的字体名称 XAML c#
Fonts names in the Combobox List XAML c#
我正在设计一个字体列表,我在其中引用了 Fonts.SystemFontFamilies,但我还想包括我的 MyDllProject 项目中存在的 3 种自定义字体。首先我添加了 SystemFontFamilies,效果很好,然后我添加了我的自定义字体(Roboto、Abstractus 和 OpenSans),这些字体很好地添加到列表中,但它给了我前缀 ./#.所以,我想找到一种方法来显示字体的名称,就像 Abstractus、Roboto 和 Open Sans 一样。
comboBox的代码是
if( _cmbFontFamilies != null )
{
_cmbFontFamilies.ItemsSource = FontUtilities.Families.OrderBy( fontFamily => fontFamily.Source );
}
FontUtilities 的代码是
internal class FontUtilities
{
internal static IEnumerable<FontFamily> Families
{
get
{
foreach ( FontFamily font in Fonts.SystemFontFamilies)
{
yield return font;
}
foreach (FontFamily fontFamily in Fonts.GetFontFamilies(new
Uri("pack://application:,,,/MyDllProject ;Component/Resources/")))
{
yield return fontFamily;
}
}
}
}
我得到的结果。
每个由 Fonts.GetFontFamilies
编辑的 FontFamily
对象 return 都有一个形式为 "./#Family Name"
的友好名称。此友好名称设置 FontFamily
的 Source
属性 并且 Source
属性 的值是 return 通过 FontFamily.ToString()
方法编辑的。
我会创建一个自定义 class FontName
public class FontName
{
public string Name { get; set; }
public string Source { get; set; }
}
和 return FontUtilities.Families
的 FontName
合集。加载自定义字体时删除前缀 "./#"
internal class FontUtilities
{
internal static IEnumerable<FontName> Families
{
get
{
foreach ( FontFamily font in Fonts.SystemFontFamilies)
{
yield return new FontName { Name = font.Source, Source = font.Source };
}
foreach (FontFamily fontFamily in Fonts.GetFontFamilies(new
Uri("pack://application:,,,/MyDllProject ;Component/Resources/")))
{
yield return new FontName { Name = fontFamily.Source.Replace("./#", string.Empty), Source = fontFamily.Source };
}
}
}
}
if( _cmbFontFamilies != null )
{
_cmbFontFamilies.SelectedValuePath = "Source";
_cmbFontFamilies.DisplayValuePath = "Name";
_cmbFontFamilies.ItemsSource = FontUtilities.Families.OrderBy( fontFamily => fontFamily.Source );
}
我正在设计一个字体列表,我在其中引用了 Fonts.SystemFontFamilies,但我还想包括我的 MyDllProject 项目中存在的 3 种自定义字体。首先我添加了 SystemFontFamilies,效果很好,然后我添加了我的自定义字体(Roboto、Abstractus 和 OpenSans),这些字体很好地添加到列表中,但它给了我前缀 ./#.所以,我想找到一种方法来显示字体的名称,就像 Abstractus、Roboto 和 Open Sans 一样。
comboBox的代码是
if( _cmbFontFamilies != null )
{
_cmbFontFamilies.ItemsSource = FontUtilities.Families.OrderBy( fontFamily => fontFamily.Source );
}
FontUtilities 的代码是
internal class FontUtilities
{
internal static IEnumerable<FontFamily> Families
{
get
{
foreach ( FontFamily font in Fonts.SystemFontFamilies)
{
yield return font;
}
foreach (FontFamily fontFamily in Fonts.GetFontFamilies(new
Uri("pack://application:,,,/MyDllProject ;Component/Resources/")))
{
yield return fontFamily;
}
}
}
}
我得到的结果。
每个由 Fonts.GetFontFamilies
编辑的 FontFamily
对象 return 都有一个形式为 "./#Family Name"
的友好名称。此友好名称设置 FontFamily
的 Source
属性 并且 Source
属性 的值是 return 通过 FontFamily.ToString()
方法编辑的。
我会创建一个自定义 class FontName
public class FontName
{
public string Name { get; set; }
public string Source { get; set; }
}
和 return FontUtilities.Families
的 FontName
合集。加载自定义字体时删除前缀 "./#"
internal class FontUtilities
{
internal static IEnumerable<FontName> Families
{
get
{
foreach ( FontFamily font in Fonts.SystemFontFamilies)
{
yield return new FontName { Name = font.Source, Source = font.Source };
}
foreach (FontFamily fontFamily in Fonts.GetFontFamilies(new
Uri("pack://application:,,,/MyDllProject ;Component/Resources/")))
{
yield return new FontName { Name = fontFamily.Source.Replace("./#", string.Empty), Source = fontFamily.Source };
}
}
}
}
if( _cmbFontFamilies != null )
{
_cmbFontFamilies.SelectedValuePath = "Source";
_cmbFontFamilies.DisplayValuePath = "Name";
_cmbFontFamilies.ItemsSource = FontUtilities.Families.OrderBy( fontFamily => fontFamily.Source );
}