web-dev-qa-db-ja.com

WPFアプリケーションに外部フォントをインストールせずに含める方法

WPFアプリケーションに外部フォントをインストールせずに含める方法

私はこのコードを試しました

  System.Drawing.Text.PrivateFontCollection privateFonts = new    System.Drawing.Text.PrivateFontCollection();
  privateFonts.AddFontFile("C:\\Documents and Settings\\somefont.ttf");
  System.Drawing.Font font = new Font(privateFonts.Families[0], 12);
  this.label1.Font = font;

Windows Form Applicationでは正常に動作しますが、WPFでは正常に動作しません。

43
Shebin

私はそのようなXAMLコードを使用します:

<Style x:Key="Hatten">
        <Setter Property="TextElement.FontFamily" Value="Resources/#HATTEN" />
</Style>

#HATTEN-リソースのhatten.tftへの参照。

スタイルの使用:

 <TextBlock x:Name="lblTitle" Style="{DynamicResource Hatten}" FontSize="72"></TextBlock>
24
Pavel

これは、これを行う2つの方法です。 1つの方法は、アプリケーション内にフォントをパッケージ化することです。もう1つの方法は、フォントを個別に出力フォルダーにすることです。違いは主に、ファイルをロードするために必要なURIです。

アプリケーション付きパッケージ

  1. /Fontsフォルダーをソリューションに追加します。
  2. True Type Fonts(*.ttf)ファイルをそのフォルダーに追加します
  3. ファイルをプロジェクトに含める
  4. フォントを選択して、ソリューションに追加します
  5. BuildAction: ResourceおよびCopy To Output Directory: Do not copyを設定します。 .csprojファイルには、次のようなセクションが必要です。

     <ItemGroup>
      <Resource Include="Fonts\NotoSans-Bold.ttf" />
      <Resource Include="Fonts\NotoSans-BoldItalic.ttf" />
      <Resource Include="Fonts\NotoSans-Italic.ttf" />
      <Resource Include="Fonts\NotoSans-Regular.ttf" />
      <Resource Include="Fonts\NotoSansSymbols-Regular.ttf" />
    </ItemGroup>
    
  6. App.xaml<FontFamily>リソースを追加します。次のサンプルコードのようになります。アプリケーションでパックする場合、URIにはファイル名が含まれないことに注意してください。

    <Applicaton ...>
    <Application.Resources>
        <FontFamily x:Key="NotoSans">pack://application:,,,/Fonts/#Noto Sans</FontFamily>
        <FontFamily x:Key="NotoSansSymbols">pack://application:,,,/Fonts/#Noto Sans Symbols</FontFamily>
    </Application.Resources>
    </Application>
    
  7. 次のようにフォントを適用します。

    <TextBlock x:Name="myTextBlock" Text="foobar" FontFamily="{StaticResource NotoSans}" 
               FontSize="10.0" FontStyle="Normal" FontWeight="Regular" />
    
  8. フォントを強制的に設定することもできます。

    myTextBlock.FontFamily = new FontFamily(new Uri("pack://application:,,,/"), "./Fonts/#Noto Sans");
    

出力ディレクトリにコピー

  1. /Fontsフォルダーをソリューションに追加します。
  2. True Typeフォント(*.ttf)ファイルをその順序に追加します
  3. ファイルをプロジェクトに含める
  4. フォントを選択して、ソリューションに追加します
  5. BuildAction: ContentおよびCopy To Output Directory: Copy if newerを設定します。 .csprojファイルには、次のようなセクションが必要です。

     <ItemGroup>
      <Content Include="Fonts\NotoSans-Bold.ttf">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Content>
      <Content Include="Fonts\NotoSans-BoldItalic.ttf">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Content>
      <Content Include="Fonts\NotoSans-Italic.ttf">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Content>
      <Content Include="Fonts\NotoSans-Regular.ttf">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Content>
      <Content Include="Fonts\NotoSansSymbols-Regular.ttf">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Content>
    </ItemGroup>
    
  6. App.xaml<FontFamily>リソースを追加します。次のサンプルコードのようになります。アプリケーションでパックする場合、URIにはファイル名が含まれないことに注意してください。

    <Applicaton ...>
    <Application.Resources>
        <FontFamily x:Key="NotoSansRegular">./Fonts/NotoSans-Regular.tts#Noto Sans</FontFamily>
        <FontFamily x:Key="NotoSansItalic">./Fonts/NotoSans-Italic.tts#Noto Sans</FontFamily>
        <FontFamily x:Key="NotoSansBold">./Fonts/NotoSans-Bold.tts#Noto Sans</FontFamily>
        <FontFamily x:Key="NotoSansBoldItalic">./Fonts/NotoSans-BoldItalic.tts#Noto Sans</FontFamily>
        <FontFamily x:Key="NotoSansSymbols">./Fonts/NotoSans-Regular.tts#Noto Sans Symbols</FontFamily>
    </Application.Resources>
    </Application>
    
  7. 次のようにフォントを適用します。

    <TextBlock Text="foobar" FontFamily="{StaticResource NotoSansRegular}" 
               FontSize="10.0" FontStyle="Normal" FontWeight="Regular" />
    

参照資料

87
MovGP0

ここで見つけたこの質問に対する最良の答え

http://geekswithblogs.net/Martinez/archive/2010/01/29/custom-font-in-wpf-application.aspx

[〜#〜] solution [〜#〜]以前よりもさらに邪悪な文字列を使用することを伴うしかし、期待どおりに動作します。

<Label FontFamily="pack://application:,,,/Folder1/#Katana">Text</Label> 

Folder1は、TTFファイルを保持するプロジェクトのフォルダーです。最後に3つのメモ:

  1. 「カタナ」はフォントの名前であり、ファイルの名前ではありません。これは大きな違いです。フォントの名前を取得するには、ファイルを2回クリックするだけです。

  2. フォント名の前にハッシュ記号「#」を忘れずに入れてください。それ以外の場合は機能しません。

  3. 「ビルドアクション」を「コンテンツ」に設定して、カスタムフォントをプロジェクトに追加することもできます。ただし、これは推奨されるアプローチではありません。簡単にするため、この可能性は無視しました。

いくつかの追加リンク

https://msdn.Microsoft.com/en-us/library/ms753303(v = vs.100).aspx

https://msdn.Microsoft.com/en-us/library/cc296385.aspx

16
Developer

まさにその答えは見つかりませんでした。しかし、インターネットでは見なかった解決策を見つけました。

フォルダを作成し、内部のすべてのファイルをリソースとしてマークするという推奨事項に従いました。しかし、それらを列挙する必要があり、名前をどこかに記録せずにすべてを画面にロードする必要があるため、それが私の主な問題でした。別のフォントをそのフォルダーにドロップして、一覧表示するだけです。

Resources/fontsフォルダー内のすべてのファイルをリストするソリューションとしてこれを見つけました

Fonts.GetFontFamilies(new Uri("pack://application:,,,/resources/fonts/#"))

フォントの整理に役立つと思います。

これにはxamlを使用します

<Window

 FontFamily ="./Fonts/#somefont"

>

「Fonts」フォルダ内にフォントファイルを含めました

4
Tharu

プロジェクトのアセットフォルダー内にフォントフォルダーがあります。ビルド時に、それらのフォントをコンテンツとしてフォルダーにコピーします。次に、次のXAMLを使用してFontAwesomeフォントを使用し、ボタンにアイコンを配置します。

<Button Content="&#xf0c9;" FontFamily="./assets/fonts/#FontAwesome">
2
Steve Parish

ここに私のために働いたものがあります:

(1)プロジェクトにディレクトリを追加:フォント

(2)ttfフォントファイルをフォントディレクトリに移動する

(3)プロジェクトにttfフォントファイルを追加する

(4)tffフォントファイルの「Build」プロパティを「Resource」に設定します(注:コンボボックスの選択では「Embedded Resource」の代わりに「Resource」を使用しました)。

(5)フォントを使用しているウィンドウを開き、次の変更を行います。

<Window ... >
    <Window.Resources>
        <FontFamily x:Key="YourFontNickName">
        pack://application:,,,/font/#NameOfFont
        <!-- Note: NameOfFont can be font by double clicking
             on font from Explorer and writing down name
             of the font reported.  Its not the same
             as the file name -->
        </FontFamily>   
    </Window.Resources>


    <!-- Use font as Xaml -->
    <StackPanel>
        <Textblock FontFamily="{StaticResource YourFontNickName}">
        This is a test
        </Testblock>
        <Textblock Name="text1"/>
    </StackPanel>
...
</Window>

(6)フォントをコードから変更する場合。これを行う:

public partial class Window1 : Window {

    // Use font as C# Code
    public void UpdateText1() {

            text1.Text      = "Hi There";
            FontFamily ff   = this.Resources["YourFontNickName"] 
                                as FontFamily;
            if (ff == null) {
                Messagebox.Show("Wrong Font Name", "ERROR");
                return;
            }
            text1.FontFamily = ff;
            text1.FontSize   = 30;
    }

    ...
}
1
Bill Moore

外部フォントを含める最も簡単な方法は

ステップ1。フォルダーFontsを作成し、そこにフォントを追加します。

enter image description here

ステップ2ビルドアクションをcontentに設定し、出力ディレクトリにコピーしてCopy alwaysに設定します。

enter image description here

ステップ3。ソリューションをビルドして、Fontディレクトリで更新します。

ステップ4FontFamily="Fonts/#font name"を使用して要素でフォントを使用します

enter image description here

出来た!

cscience

0
StudioX

リソース項目としてフォントを追加する必要があります

リンク ;次の手順に従って、目的のフォントをアプリケーションリソースファイルとして追加できます。

  1. フォントファイルをプロジェクト内の任意の場所にコピーします。ほとんどの場合、リソースファイルは「resources」という名前のフォルダーにコピーされます。これをプロジェクトに新規フォルダーを作成し、「resources」という名前を付けてから、通常、そのフォルダにはttfまたはotf形式があります

  2. 次に、このファイルをリソースファイルとして宣言する必要があります。そのためには、2つのオプションがあります。

    1. フォントファイルを右クリックし、プロパティを選択(または選択後にF4キーを押し)してから、「ビルドアクション」「リソース」
    2. プロジェクトのディレクトリ編集に移動しますproject-name.csprojファイルと次のタグ:

      <ItemGroup>            
          <Resource Include="resources\<font-file-name>.ttf" />  
      </ItemGroup>```
      

最後に、アプリケーション内で次のようにfont-familyプロパティを設定できます。

FontFamily="./Resources/Fonts/#<font-name>"

「font-name」は、font-file-nameとはdifferentであることに注意してください。フォントファイルを開き、フォント名のプロパティを確認できます(Microsoft Window)

fetching font name by opening font file

0
danitiger33

最初)/Resources/Fonts/などのプロジェクトフォルダーにフォントをコピーし、font-propertiesを設定-> Build Action:Resource

2)コードで使用

FontFamily="/AssemblyNamespace;component/Resources/Fonts/IranSans/#IRANSansWeb Medium"

enter image description here

0

私はこれを別のフォントでも動作させようとしていましたが、。/ Fontsを使用してこの形式でのみ動作しました

<FontFamily x:Key="NotoSans">pack://application:,,,./Fonts/#Noto Sans</FontFamily>

0
Eric Unger