我习惯在网络语言中使用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
。有什么想法吗?
答案 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
}
}
}