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では正常に動作しません。
私はそのような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>
これは、これを行う2つの方法です。 1つの方法は、アプリケーション内にフォントをパッケージ化することです。もう1つの方法は、フォントを個別に出力フォルダーにすることです。違いは主に、ファイルをロードするために必要なURIです。
/Fonts
フォルダーをソリューションに追加します。*.ttf
)ファイルをそのフォルダーに追加します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>
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>
次のようにフォントを適用します。
<TextBlock x:Name="myTextBlock" Text="foobar" FontFamily="{StaticResource NotoSans}"
FontSize="10.0" FontStyle="Normal" FontWeight="Regular" />
フォントを強制的に設定することもできます。
myTextBlock.FontFamily = new FontFamily(new Uri("pack://application:,,,/"), "./Fonts/#Noto Sans");
/Fonts
フォルダーをソリューションに追加します。*.ttf
)ファイルをその順序に追加します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>
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>
次のようにフォントを適用します。
<TextBlock Text="foobar" FontFamily="{StaticResource NotoSansRegular}"
FontSize="10.0" FontStyle="Normal" FontWeight="Regular" />
ここで見つけたこの質問に対する最良の答え
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つのメモ:
「カタナ」はフォントの名前であり、ファイルの名前ではありません。これは大きな違いです。フォントの名前を取得するには、ファイルを2回クリックするだけです。
フォント名の前にハッシュ記号「#」を忘れずに入れてください。それ以外の場合は機能しません。
「ビルドアクション」を「コンテンツ」に設定して、カスタムフォントをプロジェクトに追加することもできます。ただし、これは推奨されるアプローチではありません。簡単にするため、この可能性は無視しました。
いくつかの追加リンク
https://msdn.Microsoft.com/en-us/library/ms753303(v = vs.100).aspx
まさにその答えは見つかりませんでした。しかし、インターネットでは見なかった解決策を見つけました。
フォルダを作成し、内部のすべてのファイルをリソースとしてマークするという推奨事項に従いました。しかし、それらを列挙する必要があり、名前をどこかに記録せずにすべてを画面にロードする必要があるため、それが私の主な問題でした。別のフォントをそのフォルダーにドロップして、一覧表示するだけです。
Resources/fontsフォルダー内のすべてのファイルをリストするソリューションとしてこれを見つけました
Fonts.GetFontFamilies(new Uri("pack://application:,,,/resources/fonts/#"))
フォントの整理に役立つと思います。
これにはxamlを使用します
<Window
FontFamily ="./Fonts/#somefont"
>
「Fonts」フォルダ内にフォントファイルを含めました
プロジェクトのアセットフォルダー内にフォントフォルダーがあります。ビルド時に、それらのフォントをコンテンツとしてフォルダーにコピーします。次に、次のXAMLを使用してFontAwesomeフォントを使用し、ボタンにアイコンを配置します。
<Button Content="" FontFamily="./assets/fonts/#FontAwesome">
ここに私のために働いたものがあります:
(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。フォルダーFonts
を作成し、そこにフォントを追加します。
ステップ2ビルドアクションをcontent
に設定し、出力ディレクトリにコピーしてCopy always
に設定します。
ステップ3。ソリューションをビルドして、Fontディレクトリで更新します。
ステップ4FontFamily="Fonts/#font name"
を使用して要素でフォントを使用します
出来た!
cscience !
リソース項目としてフォントを追加する必要があります
リンク ;次の手順に従って、目的のフォントをアプリケーションリソースファイルとして追加できます。
フォントファイルをプロジェクト内の任意の場所にコピーします。ほとんどの場合、リソースファイルは「resources」という名前のフォルダーにコピーされます。これをプロジェクトに新規フォルダーを作成し、「resources」という名前を付けてから、通常、そのフォルダにはttfまたはotf形式があります
次に、このファイルをリソースファイルとして宣言する必要があります。そのためには、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)
私はこれを別のフォントでも動作させようとしていましたが、。/ Fontsを使用してこの形式でのみ動作しました
<FontFamily x:Key="NotoSans">pack://application:,,,./Fonts/#Noto Sans</FontFamily>