Как автоматически генерировать элементы управления WPF на основе файла XML? - PullRequest
32 голосов
/ 14 февраля 2011

У меня есть XML-файл, который сообщает мне элементы управления, которые я должен добавить в форму, но этот XML-файл изменяется динамически, и мне нужно обновить форму.В настоящее время я могу прочитать файл XML, но я не знаю, возможно ли автоматически создавать формы на основе этого или нет?

Ответы [ 4 ]

62 голосов
/ 14 февраля 2011

Да, это возможно.

WPF предлагает несколько способов создания элементов управления в Xaml или в коде.

В вашем случае, если вам нужно динамически создавать свои элементы управления, вам придется создавать их в коде. Вы можете создать свой элемент управления напрямую, используя их конструкторы, как в:

        // Create a button.
        Button myButton= new Button();
        // Set properties.
        myButton.Content = "Click Me!";

        // Add created button to a previously created container.
        myStackPanel.Children.Add(myButton);

Или вы можете создать свои элементы управления в виде строки, содержащей xaml, и использовать XamlReader для анализа строки и создания требуемого элемента управления:

        // Create a stringBuilder
        StringBuilder sb = new StringBuilder();

        // use xaml to declare a button as string containing xaml
        sb.Append(@"<Button xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' 
                            xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' ");
        sb.Append(@"Content='Click Me!' />");

        // Create a button using a XamlReader
        Button myButton = (Button)XamlReader.Parse(sb.ToString());

        // Add created button to previously created container.
        stackPanel.Children.Add(myButton);

Теперь, какой из двух методов, которые вы хотите использовать, зависит от вас.

Жан-Луи * * 1013

4 голосов
/ 14 февраля 2011

Вы можете легко добавлять элементы управления с помощью кода в wpf, вы можете следовать этой статье . Следует также отметить, что XAML - это форма XML, поэтому вы можете сохранить свой XAML в файл XML, чтобы вам не нужно было добавлять элементы управления в код, однако это зависит от сложности вашего приложения.

2 голосов
/ 29 декабря 2015

Я довольно новичок в Xaml, но добавлю к ответу Жан-Луи, если вы не хотите добавлять пространства имен к каждой строке элемента, тогда вы можете сделать что-то подобное, используя пространство имен System.Windows.Markup:

                ParserContext context = new ParserContext();
            context.XmlnsDictionary.Add("", "http://schemas.microsoft.com/winfx/2006/xaml/presentation");
            context.XmlnsDictionary.Add("x", "http://schemas.microsoft.com/winfx/2006/xaml");

            string xaml = String.Format(@"<ListBoxItem Name='Item{0}' Content='{1}' />", itemID, listItems[itemID]);
            UIElement element = (UIElement)XamlReader.Parse(xaml, context);

            listBoxElement.Items.Add(element);
1 голос
/ 19 мая 2016

Добавление элементов управления через метод Children.Add - это самый быстрый способ, который я нашел, например,

            this.Grid.Add(new TextBox() { Text = "Babau" });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...