2009-04-10 17 views
1

ディスク(アプリケーションリソースからではない)からxamlファイルを読み込み、外部オブジェクトを作成せずにオブジェクトツリーを作成できますか?つまり、Windowから派生したクラスを作成し、ディスクからxamlファイルをロードしたいとします。私は、Windowから派生しないクラスを作成してディスクからロードできるか、Windowから派生してxamlをアプリケーションリソースからロードするクラスを作成できます。外部オブジェクトを作成せずにxamlファイルをロードするにはどうすればよいですか?

例えば、私はこれを行うことができます:

XmlTextReader xmlReader = new XmlTextReader("c:\\mywindow.xaml"); 
object obj = XamlReader.Load(xmlReader); 
Window win = obj as Window; 

をしかし、私が本当にやりたいことはこれです:

class MyWindow : Window 
{ 
    public MyWindow() 
    { 
     System.Uri resourceLocater = new System.Uri("file://c:/mywindow.xaml", UriKind.Absolute); 
     System.Windows.Application.LoadComponent(this, resourceLocater); 
    } 
} 
... 
MyWindow w = new MyWindow(); 

現在のコードの第2ビットは、URIができないという例外を与えます絶対的である。

+0

偉大なアイデア、ウィンドウやコンポーネントのライブラリを使用するのを待っている - 華麗。 – MrTelly

答えて

1

あなたはこのように、文字列にXAMLファイルのコンテンツをロードして、コンテンツを解析することができます。そして、あなたはウィンドウのContentプロパティにxamlContentを設定することができるはず

 try 
     { 
      string strXaml = String.Empty; 
      using (var reader = new System.IO.StreamReader(filePath, true)) 
      { 
       strXaml = reader.ReadToEnd(); 
      } 

      object xamlContent = System.Windows.Markup.XamlReader.Parse(strXaml); 
     } 
     catch (System.Windows.Markup.XamlParseException ex) 
     { 
      // You can get specific error information like LineNumber from the exception 
     } 
     catch (Exception ex) 
     { 
      // Some other error 
     } 

Window w = new Window(); 
w.content = xamlContent; 
w.ShowDialog(); 
0

アセンブリを絶対パスで読み込み、ファイルシステムのどこかのファイルを指すことができるかどうかはわかりません。

私は(私の答えの編集を見て)多分私のポストは助けになることができ、数日前に同様の問題があった:

Load a ResourceDictionary from an assembly

編集:私はちょうどあなたがしたい見たがアセンブリではなくxamlをロードしますか?次に、System.Windows.Markup.XamlReaderをチェックしてください。おそらくこれがあなたが探しているものです。

関連する問題