• Microsoft .NET
  • WPF и Silverlight
  • Элементы управления пользовательского интерфейса Silverlight (User Interface Controls)

Элементы управления пользовательского интерфейса Silverlight (User Interface Controls) - Динамическое создание элементов управления

ОГЛАВЛЕНИЕ

Динамическое создание элементов управления

В Silverlight 2 все элементы управления Xaml являются изоморфными для объектов общеязыковой среды исполнения (CLR objects). То есть, все что вы можете создать в Xaml вы также можете создать в коде. 

Там , где вы можете написать

<Button x:Name="myButton" Content="Hello" />

вы также можете написать

Button myButton = new Button();
myButton.Content = "Hello";

Хотя вы можете создать все ваши элементы управления и объекты в коде, правила хорошего тона гласят о том, что лучше делать это в Xaml. Наиболее явной причиной будет то, что Xaml является очень "инструментарным" - то есть он несет в себе возможность модифицировать инструменты, как Visual Studio и Expression, и тем самым легче масштабировать, изменять и осуществлять поддержку.

С другой стороны, существуют моменты, когда во время разработки вы не знаете количество необходимых объектов, и в таких случаях возможность динамического создания объектов будет просто основным требованием.

Мы можем сделать минимальное изменение в нашей существующей программе и добавить другую кнопку по просьбе пользователя. Добавьте следующую кнопку к файлу Xaml (обратите внимание на то, что мы также называет полотно!)

<Canvas x:Name="myCanvas">
  <Button x:Name="myButton" Content="Hello"
      Canvas.Left="10" Canvas.Top="10"/>
  <Button x:Name="Another" Content="Add Another"
      Canvas.Left="10" Canvas.Top="50" />
  <CheckBox x:Name="rushOrder" Content="Rush"
      Canvas.Left="50" Canvas.Top="10" /> 

В результате будет добавлена кнопка на страницу, и она будет содержать в себе "Add Another". При нажатии на кнопку нам необходимо добавить другую кнопку к пользовательскому интерфейсу, при этом нам нужно обеспечить данную кнопку своими размерами, позицией и поведением.

Все это мы сделаем в фоновом коде.