このステートメントは、アセンブリ内のコンテンツ ファイルを参照できないことを意味します... (そのため、アプリケーションで指定されたコンテンツ ファイルのみが "application://" を使用して解決できます)。
http://msdn.microsoft.com/en-us/library/aa970069(v=vs.85).aspx
参照されたアセンブリのコンテンツ ファイルは、WPF でサポートされていないため含まれません。参照アセンブリに埋め込まれたファイルのパック URI は、参照アセンブリの名前と ;component サフィックスの両方が含まれているため、一意です。サイト オブ オリジン ファイルのパック URI は、siteoforigin:/// オーソリティを使用する唯一のパック URI を使用するため、一意です。
.exe が実行されている場所を参照する「siteoforigin」でどこかに到達する場合があります。
Source="pack://siteoforigin:,,,/../Modules/Icons/Icon.png"
また
Source="pack://siteoforigin:,,,/Icons/Icon.png"
相対パスをサポートしていない可能性がありますが。
これも試してみてください:
Source="../Modules/Icons/Icon.png"
この:
Source="Icons/Icon.png"
PackUriHelper
Pack URI を試すときの 1 つのヒントは、適切な構文/セマンティクスに準拠するように、 を使用してそれらを構築することです。
関連する投稿を参照してください。
別のアイデア....
PNG ファイルへの絶対パスを構築するのに役立つ独自の MarkupExtension を定義できます。
LoadFrom を使用して DLL をロードする直前に設定されたグローバル構成設定があります。
次に、XAML で拡張機能を使用するようにします。
Source={local:MyMarkupExtensionPathBuilder Icon.png}
これを出発点として使用してください...あなたの場合、「application://」を使用したくないのですが...「C:\」などの絶対「ファイル」パスタイプのURIとしてUriを構築したいProgram Files\myapplication\Root\Modules\Icons\icon.png".
MarkupExtension を取得して BitmapSource を直接返すことができます (または単に文字列を返すように取得することができます...その後、TypeConverter はとにかく BitmapSource に解決されます)。
(コンバーターを使用してパスの 2 つの部分を連結する Binding で同様のことを行うこともできます。または、1 つを使用する場合は ViewModel に連結を行わせることもできます...マークアップ拡張はそれを行うためのより適切な方法です)