如何在方法c#中使用参数作为对象名称

时间:2017-09-07 07:54:38

标签: c# wpf canvas

我是C#和WPF的新手。我正在玩Canvas和Ellipses等东西。

我创建了一个创建新画布的方法:

    public void CreateCanvas(Canvas parentCanvas, int height, int width, double xCoord, double yCoord)
    {
        Canvas new_canvas = new Canvas();
        new_canvas.Background = new SolidColorBrush(Colors.Red);
        new_canvas.Height = height;
        new_canvas.Width = width;
        Canvas.SetLeft(new_canvas, xCoord);
        Canvas.SetTop(new_canvas, yCoord);
        parentCanvas.Children.Add(new_canvas);

    }

例如,当我想要以画布方式创建另一个子画布时,我需要画布的名称。 所以我的猜测是将画布名称作为参数。 嗯..不知道如何。

我希望它看起来像这样。

public void CreateCanvas(Canvas parentCanvas, string canvasName, int height, int width, double xCoord, double yCoord)
{
    Canvas canvasName = new Canvas();
    canvasName.Background = new SolidColorBrush(Colors.Red);
    canvasName.Height = height;
    canvasName.Width = width;
    Canvas.SetLeft(canvasName, xCoord);
    Canvas.SetTop(canvasName, yCoord);
    parentCanvas.Children.Add(canvasName);

}

我想要做的是在画布全部创建之后,将一个文本块作为子项(Children.Add)添加到由方法创建的画布中。

1 个答案:

答案 0 :(得分:0)

像这样创建你的Canvas

public void CreateCanvas(Canvas parentCanvas,string CanvasName, int height, int width, double xCoord, double yCoord)
{
    Canvas new_canvas = new Canvas();           
    new_canvas.Name = CanvasName;  //assign Name here    
    new_canvas.Background = new SolidColorBrush(Colors.Red);
    new_canvas.Height = height;
    new_canvas.Width = width;
    Canvas.SetLeft(new_canvas, xCoord);
    Canvas.SetTop(new_canvas, yCoord);
    parentCanvas.Children.Add(new_canvas);
}

然后你可以通过NameProperty使用:

找到儿童
public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
    {
        if (depObj != null)
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
            {
                DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
                if (child != null && child is T)
                {
                    yield return (T)child;
                }

                foreach (T childOfChild in FindVisualChildren<T>(child))
                {
                    yield return childOfChild;
                }
            }
        }
    }

源代码取自Here

稍后添加textblock只需致电:

foreach (Canvas child in FindVisualChildren<Canvas>(this).Where(x => !string.IsNullOrEmpty(x.Name) && x.Name.Equals("MyCanvas")))
{
    child.Children.Add(new TextBlock() { Text = "Dynamimcally Added Textblock" });
}

当然,您应该知道稍后将要使用的canvas的名称。

用于创建Canvas

CreateCanvas(ParentCanvas,"MyCanvas", 200, 200, 0, 0);