2011-06-29 9 views
1

でXAMLファイルを読み込み、私はデザインモードで完璧に動作し、次のSilverlightサンプルデータXAMLファイル、持っている:このデータは実行時にも便利であるので、(永遠にないかもしれない)XDocument

<viewmodel:MapViewModel 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:viewmodel="clr-namespace:MyApplication.ViewModels"> 
<viewmodel:MapViewModel.Lines> 
    <viewmodel:Line Line="M 100 100 L 280 100 S 302 102 315 115 L 500 300"/> 
</viewmodel:MapViewModel.Lines></viewmodel:MapViewModel> 

を私はしたいですコード内のxmlを読み込むそのために私はXDocumentを使用し、それは動作します。つまり、ドキュメント全体を読み込んで解析することができます。しかし、私は、要素にアクセスする方法を把握することはできません。ええ、私は "ライン"にアクセスしますか?私が試した何

は次のとおりです。

  var lines = doc.Descendants(XName.Get("Line", "viewmodel:")).ToArray(); 

それはオールウェイズ何も返しません。

  • "MyApplication.ViewModels"
  • "MyApplication.ViewModels:"
  • :私はそれは、名前空間の問題であると仮定するので、私は

    • "のviewmodel"
    • "のviewmodel" を試してみました
    • "CLR名前空間:MyApplication.ViewModels" と
    • "CLR名前空間:MyApplication.ViewModels:"

    誰かが私が間違っていることを教えてもらえますか?欠落しているxml-headerが理由ですか?私は、正しいヘッダー(しかし、名前空間なし)allreadyとxmlファイルを読んで、それは働いた。

    答えて

    1

    使用XNamespace:

    var lines = xdoc.Descendants("{clr-namespace:MyApplication.ViewModels}Line").ToArray(); 
    

    var xdoc = XDocument.Parse(xaml); 
    XNamespace ns = "clr-namespace:MyApplication.ViewModels"; 
    var lines = xdoc.Descendants(ns + "Line").ToArray(); 
    

    あなたもこの構文を使用することができます