15

リソース用に個別のライブラリ アセンブリを使用するアプリケーションがあり (ただし、コードのないリソースのみのアセンブリではありません)、ライブラリにカスタム フォントを含めたいと考えています。

プロパティをOpen Type Fontビルド アクション = 'リソース' および Copy to Output = 'Do Not Copy'、次のコードを使用:

FontFamily font = new FontFamily(new Uri("pack://application:,,,/"), 
                      "./Resources/#CustomFont")); // Resources is a subfolder

ただし、フォントをリソース ライブラリ プロジェクトに追加しようとすると、フォントが読み込まれません。次のコードを使用してロードしようとしました (これも注意: パック URI の経験があまりありません)。

FontFamily font = new FontFamily(new Uri("pack://application:,,,/MyLibrary"),
                      "./Resources/#CustomFont")); 
                      // there is a Resources subfolder in my library as well
                      // not sure about whether I need the .

ライブラリは、画像などの他のリソースに対しても機能します。

また、URI の他の順列を試してみましたが、成功しませんでした (例外はスローされず、デフォルトのフォントで表示されるだけで、これが別の問題であるかどうかはわかりません)。

MSDN のPackaging Fonts with Applicationsから作業してきました。これには、フォント リソース ライブラリを作成する例がありますが、コード ビハインドを使用した例はありません (これにはコード ビハインドを使用せざるを得ません)。

私が何をする必要があるかについてのアイデアはありますか?私は軌道に乗っていませんか?

4

4 に答える 4

21

私はそれを私のアプリケーションで動作させています(コードビハインドで別のアセンブリからフォントをロードしています)。このようなフォントURIの場合:

pack://application:,,,/MyAssembly.Name;component/Resources/Fonts/#Swis721 Md BT

私がそれを機能させる方法(私が正しく覚えていれば、苦痛な試行錯誤の後)は次のとおりです。

new FontFamily(
    new Uri("pack://application:,,,/MyAssembly.Name;component/Resources/Fonts/"),
    "./#Swis721 Md BT"
)

お役に立てば幸いです。

于 2012-05-09T20:19:09.640 に答える
1

WPF は、パック表記を使用してプログラムで FontFamily オブジェクトを作成することをサポートしていません。

ドキュメントは、ページの最後にそれを言っています

引用は次のとおりです。

pack: 表記を使用した絶対 URI: WPF アプリケーションでは、フォントへの絶対 URI (Uniform Resource Identifier) 参照の一部として "pack:" を使用してプログラムで FontFamily オブジェクトを作成することはできません。たとえば、「pack://application:,,,/resources/#Pericles Light」は無効なフォント参照です。

于 2015-03-30T13:45:01.873 に答える