2012-05-09 4 views
1

Как я могу сгенерировать макет (XAML) программно?Программный код Generateate (XAML)

Скажем, у меня есть какая-то петля. И после каждого я хочу создать это со значениями, которые я получил:

   <Grid Height="150" Name="grid1"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition /> 
         <ColumnDefinition Width="200" /> 
        </Grid.ColumnDefinitions> 
        <Image Height="150" Name="image1" Stretch="Fill" Width="200" Grid.Column="1" Source="/Ilm;component/Images/testicon.png" HorizontalAlignment="Right" VerticalAlignment="Top" /> 
        <TextBlock Height="51" Name="textBlock1" Text="Paris" Margin="12,20,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="40" /> 
        <TextBlock FontSize="40" Height="51" HorizontalAlignment="Left" Margin="13,75,0,0" Name="textBlock2" Text="19°C" VerticalAlignment="Top" /> 
       </Grid> 
+0

Вы хотите добавить к нему новые строки или создать целую вещь? – scottheckel

+0

Я хочу создать целую вещь ... столько, сколько необходимо. –

+0

Хорошо, посмотрите мой ответ ниже. Я обновил его, чтобы добавить сетку. – scottheckel

ответ

5

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

rowNumber = 0; // Set the current row that you are adding 
grid1.RowDefinitions.Add(new RowDefinition()); 

Image img = new Image(); 
img.Height = 150; 
img.Name = "image1"; 
img.Stretch = Stretch.Fill; 
img.Width = 200; 
img.HorizontalAlignment = HorizontalAlignment.Right; 
img.VerticalAlignment = VerticalAlignment.Top; 
// Set your image properties 
img.SetValue(Grid.RowProperty, rowNumber); 
img.SetValue(Grid.ColumnProperty, 1); 
grid1.Children.Add(img); 

TextBlock tb1 = new TextBlock(); 
// Set your text block properties 
tb1.SetValue(Grid.RowProperty, rowNumber); 
tb1.SetValue(Grid.ColumnProperty, 0); 
grid1.Children.Add(tb1); 

TextBlock tb2 = new TextBlock(); 
// Set your text block properties 
tb2.SetValue(Grid.RowProperty, rowNumber); 
tb2.SetValue(Grid.ColumnProperty, 0); 
grid1.Children.Add(tb2); 

Вам нужно будет поставить свойства, которые вы хотите установить, где у меня есть комментарий, а также при условии, что правильный номер строки (с нуля).

Чтобы добавить всю вещь ...

Grid grid1 = new Grid(); 
grid1.Height = 150; 
grid1.Name = "grid1"; 
parentControl.Children.Add(grid1); // Note: parentControl is whatever control you are added this to 
grid1.ColumnDefinitions.Add(new ColumnDefinition()); 
grid1.ColumnDefinitions.Add(new ColumnDefinition { Width = 200}); 

// From here insert the code for adding a row that is provided above 

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

+0

Когда я пытаюсь добавить сетку в «parentControl», она говорит «Параметр неверен». и ничего более ценного, чтобы исправить ошибку ... чем вы для своего долгого ответа, конечно. Может, мне стоит искать ItemControl instaed .. потому что это слишком сложно для меня ... –

+1

Хорошо, через 1 час я получил его. .. Я сделал свой код для моего проекта. Ты босс! –

2

Один из вариантов заключается в том, чтобы поместить весь код в код-код как Hexxagonal as suggested.

Другой вариант, и более обычный, заключается в использовании ItemsControl. Это позволит обеспечить более четкое разделение обязанностей, оставив визуальный макет в XAML, а не код.

+0

Да, конечно. Я должен был упомянуть, что его программный метод не был бы лучшим. – scottheckel

+0

Без сомнения. Я просто хотел бросить это там, если бы OP не знал о ItemsControl. –

Смежные вопросы