我习惯于使用web语言中的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。有什么想法吗?
发布于 2014-05-26 00:26:06
您需要将发送方转换为边框元素并检索子元素。即:
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
}
}
}https://stackoverflow.com/questions/23860904
复制相似问题