Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向XAML画布C添加元素#_C#_Xaml_Canvas - Fatal编程技术网

C# 向XAML画布C添加元素#

C# 向XAML画布C添加元素#,c#,xaml,canvas,C#,Xaml,Canvas,我用xml创建了一个Windows8应用程序,并使用代码隐藏。 我有一个按钮,当按下时,将创建一个画布,并在其中放置一个网格 private void AddClass_Click_1(object sender, RoutedEventArgs e) { SolidColorBrush greenBrush = new SolidColorBrush(Windows.UI.Colors.Green); Thickness size = new

我用xml创建了一个Windows8应用程序,并使用代码隐藏。 我有一个按钮,当按下时,将创建一个画布,并在其中放置一个网格

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

    }

我现在需要做的是,在任何给定时间使用按钮向我刚刚创建的画布中添加更多元素,但我不确定如何引用新创建的画布。

在类级别保存引用:

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);
}
但是为什么不在XAML中定义您的
Canvas
?然后,如果您给它一个名称,您可以在代码隐藏中引用它:

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

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

私有void AddClass_Click_1(对象发送方,路由目标)
{
myCanvas.Children.Add(newgridview());
}

只需移动画布声明即可

Canvas newcanvas = new Canvas();
在功能之外,但在您计划从中解决它的范围内


稍后,当您想从按钮上的代码隐藏中再次引用它时,它仍将存在。

因为您以这种方式添加了新创建的画布:

classes.Items.Add(newcanvas);
然后我想,稍后尝试访问它的第一件事是从
类的
属性:

classes.Items

如果您在
项目中有多个对象,只需迭代
项目
,检查项目类型是否为
画布

我应该更清楚,我需要单独向画布添加元素,这似乎是另一个问题,您说:“在我刚刚创建的画布中添加更多元素”。如果您想在每次单击时创建一个新画布,请将其隐藏在列表中—您似乎已经开始这样做了..我没有在xaml中定义它的原因是因为我无法确定需要多少个画布。我可能需要多达数千个。使用字典会比列表更好吗?这取决于你需要做什么,如果你不需要访问它们,你不需要隐藏它们。我应该更清楚,我需要单独向画布添加元素。你是说你要添加多个画布吗?每次用户触摸按钮时,您想要另一个画布?如果有多个画布,您如何知道用户打算将哪个画布作为附加项目的目标?