C# 如何检索以编程方式创建的控件的名称
在可以通过编程方式创建一系列按钮的应用程序中,单击其中一个按钮的上下文菜单后,如何检索这些按钮的名称? 这是一段代码:C# 如何检索以编程方式创建的控件的名称,c#,windows-phone-7,windows-phone-8,C#,Windows Phone 7,Windows Phone 8,在可以通过编程方式创建一系列按钮的应用程序中,单击其中一个按钮的上下文菜单后,如何检索这些按钮的名称? 这是一段代码: private void addButton_Click(object sender, System.EventArgs e) { int y = (buttonIndex * 80) + 5; btn.Name = "btn" + buttonIndex.ToString(); btn.Content = "butto
private void addButton_Click(object sender, System.EventArgs e)
{
int y = (buttonIndex * 80) + 5;
btn.Name = "btn" + buttonIndex.ToString();
btn.Content = "button " + buttonIndex.ToString();
btn.Width = 440;
btn.Height = 100;
Thickness margin = new Thickness(0, y, 0, 0);
btn.Margin = margin;
// .. all other properties..
pivot1Grid.Children.Add(btn);
buttonIndex++;
AddContextMenuItems(btn);
}
private void AddContextMenuWithMenuItems(Button btn)
{
ContextMenu contextMenu = new ContextMenu();
MenuItem menuItem1 = new MenuItem() { Header = "Edit", Tag = "Edit" };
MenuItem menuItem2 = new MenuItem() { Header = "Remove", Tag = "Remove" };
menuItem1.Click += new RoutedEventHandler(menuItem1_Click);
menuItem2.Click += new RoutedEventHandler(menuItem2_Click);
contextMenu.Items.Add(menuItem1);
contextMenu.Items.Add(menuItem2);
ContextMenuService.SetContextMenu(btn, contextMenu);
}
现在,在click事件中,我应该能够获得单击的按钮的名称(如果上下文菜单是直接在XAML中创建的,那么它会起作用):
但它总是给出一个空字符串。
你能告诉我哪里错了吗?
谢谢在您的代码中,您正在将
sender.Parent
转换为ContextMenu
。因此,您知道您正在操作ContextMenu对象。那么,为什么您希望通过查询上下文菜单的名称神奇地获得按钮的名称呢
在您的情况下,最简单的方法是将您的信息存储在上下文菜单的标记属性中:
private void AddContextMenuWithMenuItems(Button btn)
{
ContextMenu contextMenu = new ContextMenu();
MenuItem menuItem1 = new MenuItem() { Header = "Edit", Tag = "Edit" };
MenuItem menuItem2 = new MenuItem() { Header = "Remove", Tag = "Remove" };
menuItem1.Click += new RoutedEventHandler(menuItem1_Click);
menuItem2.Click += new RoutedEventHandler(menuItem2_Click);
contextMenu.Items.Add(menuItem1);
contextMenu.Items.Add(menuItem2);
// Store the name of the button in the Tag property of the context menu
contextMenu.Tag = btn.Name;
ContextMenuService.SetContextMenu(btn, contextMenu);
}
然后,在事件处理程序中,您只需检索之前设置的值:
void menuItem1_Click(object sender, RoutedEventArgs e)
{
var contextMenu = (ContextMenu)((MenuItem)sender).Parent;
string btnName = (string)contextMenu.Tag;
..
}
在代码中,您正在将sender.Parent
转换为ContextMenu
。因此,您知道您正在操作ContextMenu对象。那么,为什么您希望通过查询上下文菜单的名称神奇地获得按钮的名称呢
在您的情况下,最简单的方法是将您的信息存储在上下文菜单的标记属性中:
private void AddContextMenuWithMenuItems(Button btn)
{
ContextMenu contextMenu = new ContextMenu();
MenuItem menuItem1 = new MenuItem() { Header = "Edit", Tag = "Edit" };
MenuItem menuItem2 = new MenuItem() { Header = "Remove", Tag = "Remove" };
menuItem1.Click += new RoutedEventHandler(menuItem1_Click);
menuItem2.Click += new RoutedEventHandler(menuItem2_Click);
contextMenu.Items.Add(menuItem1);
contextMenu.Items.Add(menuItem2);
// Store the name of the button in the Tag property of the context menu
contextMenu.Tag = btn.Name;
ContextMenuService.SetContextMenu(btn, contextMenu);
}
然后,在事件处理程序中,您只需检索之前设置的值:
void menuItem1_Click(object sender, RoutedEventArgs e)
{
var contextMenu = (ContextMenu)((MenuItem)sender).Parent;
string btnName = (string)contextMenu.Tag;
..
}
尝试使用ButtonTry的“Tag”属性来使用按钮的“Tag”属性