[英]Fonts names in the Combobox List XAML c#
我正在設計 Fonts 的列表,其中我指的是 Fonts.SystemFontFamilies,但我還想包括 MyDllProject 項目中存在的 3 個自定義 fonts。 首先,我添加了 SystemFontFamilies,並且運行良好,然后我添加了我的自定義 fonts(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
Fonts.GetFontFamilies
都有一個格式為"./#Family Name"
的友好名稱。 此友好名稱設置FontFamily
的Source
屬性, Source
屬性的值由FontFamily.ToString()
方法返回。
我會創建一個自定義的 class FontName
public class FontName
{
public string Name { get; set; }
public string Source { get; set; }
}
並通過FontUtilities.Families
返回FontName
的集合。 加載自定義 fonts 時刪除前綴"./#"
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 );
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.