2012-01-18 13 views
3

私はいくつかの動的Xamlを作成しようとしています。LinqからXMLへの動的WPF生成

は、私は私が手にエラーがGrid.Columnを作成しようとしている次のC#

private void LoadUI() 
{ 
    XNamespace xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"; 

    dynamic UI = new XElement(xmlns + "Grid", 
           new XAttribute(XNamespace.Xmlns + "x", "http://schemas.microsoft.com/winfx/2006/xaml"), 
           new XAttribute("Name", "Grid1"), 
           new XElement(xmlns + "Grid.ColumnDefinitions", 
              new XElement(xmlns + "ColumnDefinition", new XAttribute("Width", "100*")), 
              new XElement(xmlns + "ColumnDefinition", new XAttribute("Width", "200*"))), 
           new XElement(xmlns + "StackPanel", new XAttribute("Name", "StackLabels"), 
              new XAttribute("Margin", "3"), 
              from column in this.TableSchema 
              where column.IsPrimaryKey == 0 && column.DataType != "timestamp" 
              select 
               new XElement(xmlns + "Label", new XAttribute("Height", "28"), 
                  new XAttribute("Name", column.ColumnName + "Label"), 
                  new XAttribute("HorizontalContentAlignment", "Right"), 
                  column.ColumnName)), 
           new XElement(xmlns + "StackPanel", 
              new XAttribute("Grid.Column", "1"), 
              new XAttribute("Name", "StackFields"), 
              new XAttribute("Margin", "3") 
            , 

       from column in this.TableSchema 
       where column.IsPrimaryKey == 0 && column.DataType != "timestamp" 
       select 
       GetUIElement(column))); 

    this.DynamicContent.Content = XamlReader.Load(UI.CreateReader()); 

} 

を持っています。正確なエラーは、{ "カンNICHT festgelegt werden。" "デアunbekannteメンバー\" Grid.Column \} ある

ので、それはGrid.Columnを知らない...

誰でも任意のアイデア?

新しいXAttribute( "Grid.Column"、 "1")で正常に動作し、コメントアウトされた行は自然に必要なものを表示しません!

生成されたグリッドは、次のようになります。

<Grid xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="Grid1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width="100*" /> 
    <ColumnDefinition Width="200*" /> 
    </Grid.ColumnDefinitions> 
    <StackPanel Name="StackLabels" Margin="3"> 
    <Label Height="28" Name="NummerLabel" HorizontalContentAlignment="Right">Nummer</Label>  
    </StackPanel> 
    <StackPanel Grid.Column="1" Name="StackFields" Margin="3"> 
    <TextBox Height="28" Name="txtNummer" Text="{Binding Path=Nummer}" /> 
    </StackPanel> 
    </Grid> 
+0

XamlReader.Load以前でエラーが発生していますか?完全なエラーをポストする方が良い。 –

+0

申し訳ありません.XamlReader.Loadでエラーが発生しています。 UIのXamlは私によく見えます... – stackeroverflow

+0

VSで生成されたxamlを読み込み、自動フォーマットさせてください。近くのタグなどを見逃すのは簡単です。ここにサンプルを投稿できますか? –

答えて

2

編集:

それは再現性があります。 XamlReader.Loadと提供されたXmlReaderのやりとりに問題があるようです。それはXamlParseExceptionをスローする"不明なメンバー 'Grid.Column'を設定できません。"それが動作から

奇妙な、文字列とロードXAMLへの変換:

var xml = UI.ToString(); 
var reader = XmlReader.Create(new StringReader(xml)); 
var content = XamlReader.Load(reader); // works now. 

私はあなたがUIオブジェクトに変換するだけでXMLマークアップを作成している参照してください。単にクエリからUIオブジェクトを作成しないのはなぜですか?

+0

xamlはgrid.columnを無視すると有効になります。私はこのメソッドが好きだった可能性があります... – stackeroverflow

+0

私はあなたの問題を再現することができます。あなたがそれを検索したいのであれば、私は英語の例外で私の答えを編集しました。 – majocha