2013年07月11日

WPFサンプル:起点サイトファイルを扱う

   このエントリーをはてなブックマークに追加 Clip to Evernote
これまでリソースファイルコンテンツファイルのサンプルを示しましたが、今回は、起点サイトファイルのサンプルです。

起点サイトファイルは、コンテンツファイルと同様、アセンブリには組み込まれませんが、コンテンツファイルとは異なり、明示的な関係を持っていません。そのため、起点サイトファイルは「ビルド時にファイルが存在しない場合」や「実行時になるまで、どんなファイルが必要になるかわからない場合」に利用されます。

起点サイトファイルを利用するには、ビルド時にデータファイルが用意できる場合には、プロジェクトにファイルを追加し、[ビルドアクション]を[なし]に設定します。

前回と同様、アプリケーションの起動場所に、[data]ディレクトリを作成し、そこに 以下の people.xmlを置いた場合の例を示します。

<?xml version="1.0" encoding="utf-8"?>
<People>
  <Person IsReal="true">
    <Name>坂本竜馬</Name>
    <Age>35</Age>
  </Person>
  <Person IsReal="true">
    <Name>井伊直弼</Name>
    <Age>44</Age>
  </Person>
  <Person IsReal="false">
    <Name>明智小五郎</Name>
    <Age>39</Age>
  </Person>
  <Person IsReal="true">
    <Name>勝海舟</Name>
    <Age>18</Age>
  </Person>
  <Person IsReal="true">
    <Name>西郷隆盛</Name>
    <Age>52</Age>
  </Person>
</People>
起点サイトファイルを読み込むには、ApplicationクラスのGetRemoteStreamメソッドを利用します。 以下C#のコードです。 ここでは、MainWindowコンストラクタで、xmlファイルを読み込み ListBoxにバインドしています。
using System;
using System.Linq;
using System.Windows;
using System.Xml.Linq;
namespace SiteOfOriginFilesSample {
    public partial class MainWindow : Window {
        public MainWindow() {
            InitializeComponent();
            Uri uri = new Uri("data/people.xml", UriKind.Relative);
            var info = Application.GetRemoteStream(uri);
            XDocument xdoc = XDocument.Load(info.Stream, LoadOptions.None);
            listBox1.ItemsSource = from xperson in xdoc.Root.Elements()
                                   select xperson.Element("Name").Value;
        }
    }
}

UriKind .Absolute を指定した場合は、以下のように URIを指定します。

Uri uri = new Uri( @"pack://siteoforigin:,,,/data/people.xml" , UriKind .Absolute);

以下実行結果とXAMLです。

SiteOfOrigin

<Window x:Class="SiteOfOriginFilesSample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ListBox x:Name="listBox1" HorizontalAlignment="Stretch"
                 VerticalAlignment="Stretch" />
    </Grid>
</Window>


WPFサンプル・目次


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52327556