2014-01-10 2 views
1

У меня есть приложение для Windows 8, созданное в xml и использующее код. У меня есть кнопка, которая при нажатии создает холст и помещает внутри него сетку.Добавление элементов в холст XAML C#

private void AddClass_Click_1(object sender, RoutedEventArgs e) 
    { 


     SolidColorBrush greenBrush = new SolidColorBrush(Windows.UI.Colors.Green); 
     Thickness size = new Thickness(); 

     size.Top = 20; 
     size.Right = 20; 
     size.Left = 20; 
     size.Bottom = 20; 
     Canvas newcanvas = new Canvas(); 
     newcanvas.Background = greenBrush; 
     newcanvas.Width=500; 
     newcanvas.Height=500; 
     newcanvas.Margin=size; 
     newcanvas.Name = "Class3"; 
     GridView temp = new GridView(); 
     newcanvas.Children.Add(temp); 
     classes.Items.Add(newcanvas); 

    } 

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

+0

Вы хотите сказать, что будете добавлять несколько холстов? Каждый раз, когда пользователь прикасается к кнопке, вам нужен другой холст? –

+0

Если есть несколько холстов, откуда вы знаете, какой пользователь намеревается в качестве цели для дополнительных предметов? –

ответ

1

Сохранить реф на уровне класса:

Canvas myCanvas; 

затем создать его только в первый раз:

private void AddClass_Click_1(object sender, RoutedEventArgs e) 
{ 
    if(myCanvas == null) 
    { 
     myCanvas = new Canvas(); 
     newcanvas.Background = greenBrush; 
     newcanvas.Width=500; 
     newcanvas.Height=500; 
     newcanvas.Margin=size; 
     newcanvas.Name = "Class3"; 
    } 
    GridView temp = new GridView(); 
    newcanvas.Children.Add(temp); 
    classes.Items.Add(newcanvas); 
} 

Но почему бы не определить вам Canvas в XAML? Тогда, если вы даете ему имя, вы можете обратиться в код-за:

<Canvas Name="myCanvas" Width="500" ...> 
</Canvas> 

private void AddClass_Click_1(object sender, RoutedEventArgs e) 
{ 
    myCanvas.Children.Add(new GridView()); 
} 
+0

Я должен был быть более ясным, мне нужно добавить элементы на холсты отдельно – Nivert9

+0

Это похоже на другой вопрос, вы сказали: «добавьте БОЛЬШЕ элементов в только что созданный холст». Если вы хотите создать новый холст в каждом щелчке в списке, который вы, похоже, начали делать. – markmnl

+0

Причина, по которой я не определяю ее в xaml, заключается в том, что я не могу сказать, сколько каналов потребуется. Мне может понадобиться до тысячи. – Nivert9

0

Просто двигайте холст декларации

Canvas newcanvas = new Canvas(); 

вне функции, но в пределах объема вы планируете обратиться из.

Позже, когда вы захотите снова ссылаться на код, расположенный на вашей кнопке, он все равно будет существовать.

+0

Я должен был быть более ясным, мне нужно добавить элементы на холсты отдельно – Nivert9

0

Поскольку вы добавили вновь созданный холст таким образом:

classes.Items.Add(newcanvas); 

Тогда я думаю, первая вещь, чтобы попытаться открыть его позже от Items собственности classes:

classes.Items 

Если у Вас есть больше затем один объект в Items, просто перейдите через Items и проверьте, есть ли тип товара Canvas.

+0

, так что это не сработает для вас? – har07

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