簡體   English   中英

Fonts Combobox名單中的名字 XAML c#

[英]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"的友好名稱。 此友好名稱設置FontFamilySource屬性, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM