2014-01-10 82 views
1

我有一個在xml中創建並使用代碼隱藏的Windows 8應用程序。 我有一個按鈕,按下後,它將創建一個畫布,並在其中放置一個網格。將元素添加到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

在類級別保存REF:

​​

然後創建它僅在第一次:

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

但爲什麼要在XAML不能確定你Canvas?然後,如果你給它,你可以參考代碼隱藏了一個名字:

<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中定義它的原因是因爲我不知道將需要多少個canavases。我可能需要多達數千個。 – Nivert9

0

只需將您的畫布聲明

Canvas newcanvas = new Canvas(); 

功能之外,但在範圍之內,你打算從解決這一問題。

之後,當您想要從按鈕後面的代碼再次引用它時,它仍然存在。

+0

我應該已經更清楚了,我需要添加元素到個別的油畫 – Nivert9

0

既然你加入新創建的畫布是這樣的:

classes.Items.Add(newcanvas); 

那麼我認爲,首先要嘗試從classesItems屬性來訪問它以後就是:

classes.Items 

如果您有更多的然後是Items中的一個對象,只需遍歷Items並檢查項目類型是否爲Canvas

+0

,所以這不適合你? – har07