【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

XAPコンテンツの読み込み

ファイルのプロパティでビルドアクションをコンテンツにするとXAPファイルの中に埋め込まれます。XAPファイルをZIPとして展開するとファイルがそのまま出てきます。プログラムから読み込む方法は以下の通りです。

var uri = new Uri("foo.txt", UriKind.Relative);
var stream = Application.GetResourceStream(uri).Stream;

ファイルが存在しないとApplication.GetResourceStream()はnullを返すので、実際に使うときはチェックした方が無難でしょう。

XmlXapResolver

別の方法としてXmlXapResolverを使った方法があります。Application.GetResourceStream()の方が手軽なので、特にこちらを使う必要はないと思います。

var uri = new Uri("foo.txt", UriKind.Relative);
var xap = new XmlXapResolver();
var stream = xap.GetEntity(uri, null, typeof(Stream)) as Stream;

XmlXapResolverという名前ですが、XMLでなくても読み込めるようです。UriにはXAPルートからの相対パスを渡します。置かれる位置はプロジェクトルートからの相対パスと同じです。プロジェクトにフォルダを作れば、コンテンツもフォルダに置かれます(例:"foo/bar.txt")。ファイルが存在しないと例外が発生するので、適宜try〜catchで処理してください。ファイル一覧を取得する方法はないようです。