Динамическая генерация WPF с Linq to XML - PullRequest
3 голосов
/ 18 января 2012

Я пытался создать динамический Xaml.

У меня есть следующее 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());

}

Ошибка, которую я получаю при попытке создать Grid.Column. Точная ошибка {"Der unbekannte Member \" Grid.Column \ "kann nicht festgelegt werden."}

так что он не знает 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>

1 Ответ

2 голосов
/ 18 января 2012

Редактировать:

Воспроизводимо.Кажется, есть некоторая проблема во взаимодействии 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.

Я вижувы создаете разметку XML только для преобразования ее в объекты пользовательского интерфейса.Почему бы просто не создавать объекты пользовательского интерфейса из запросов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...