如何访问代码生成的子元素?

时间:2014-05-25 23:29:46

标签: c# wpf events parent-child

我习惯在网络语言中使用DOM,访问子元素非常简单。即使没有指定的ID,JavaScript也可以获取当前单击的元素并更改子元素的属性。如何在C#中实现类似的行为?

以下是一些以编程方式生成元素的示例代码:

public MainWindow()
{
    InitializeComponent();

    //create a StackPanel
    StackPanel myStackPanel = new StackPanel();
    myStackPanel.Margin = new Thickness(20);
    myStackPanel.Orientation = Orientation.Horizontal;

    //add stackpanel to MainWindow
    this.AddChild(myStackPanel);
    this.SizeToContent = System.Windows.SizeToContent.WidthAndHeight;

    //create an array to loop generated items
    int[] myArray = { 1, 2, 3, 4, 5, 6 };

    foreach (int number in myArray)
    {
        //create a border to hold a label
        Border myBorder = new Border();
        myBorder.Width = myBorder.Height = 100;
        myBorder.Background = Brushes.RoyalBlue;
        myBorder.Margin = new Thickness(5);

        //create the label
        Label myLabel = new Label();
        myLabel.Foreground = Brushes.White;
        myLabel.FontSize = 14;
        myLabel.Content = number;
        myLabel.VerticalAlignment = System.Windows.VerticalAlignment.Center;
        myLabel.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;

        //add label to myBorder
        myBorder.Child = myLabel;

        //add myBorder to myStackPanel
        myStackPanel.Children.Add(myBorder);

        myBorder.MouseDown += new MouseButtonEventHandler(myStackPanel_MouseDown);
    }
}

private void myStackPanel_MouseDown(object sender, MouseButtonEventArgs e)
{
    //add code to get child label and set font to bold
}

我想访问点击的myLabel的子元素myBorder。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您需要将发件人转换为Border元素并检索子元素。即:

private void myStackPanel_MouseDown(object sender, MouseButtonEventArgs e)
{
    StackPanel myPanel = sender as StackPanel;
    Label myLabel;
    foreach(object o in myPanel.Children)
    {
        if (child is Label)
        {
            myLabel = o as Label;
            //do something with label
        }
    }
}
相关问题