我是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)添加到由方法创建的画布中。
答案 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);