Подтвердить что ты не робот

WPF: добавление элементов управления из кода

Я привык к Windows Forms, но не к WPF. Поскольку я думаю, что WPF имеет большие преимущества, я пытаюсь использовать его в своих новых проектах.

Моя проблема следующая: У меня есть Xml файл, который подскажет мне элементы управления, которые я должен добавить в форму, но этот Xml может измениться, поэтому мне нужно:

  • Прочитайте XML файл (исправлено, без проблем)
  • Создайте пользовательскую форму WPF с данными, которые я прочитал.

Возможно ли это? Или я должен использовать Windows Forms?

4b9b3361

Ответ 1

Да Возможно.

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);

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

Жан-Луи

Ответ 2

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

Ответ 3

Я новичок в Xaml, но добавлю ответ Jean-Louis, если вы не хотите добавлять пространства имен к каждой строке элемента, тогда вы можете сделать что-то вроде этого, используя пространство имен 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);

Ответ 4

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

            this.Grid.Add(new TextBox() { Text = "Babau" });