在我的MainPage.xaml中,有20个名为btn1,btn2,btn3,... ... btn20的按钮控件。现在我需要在后面的代码中使用这个按钮。
我打算使用for循环并为每个按钮执行代码。但我的问题是我无法将字符串转换为Button名称。
例如,
for (int i = 1; i <=20; i++)
{
string button = "btn" + i;
// Convert string to button somehow
// Do something with button
}
我在Google上搜索过,有很多关于从字符串转换控件名称的文章。但它们适用于Windows Forms。 Windows手机应用程序不支持这些名称空间。
答案 0 :(得分:2)
你可以这样做
for (int i = 1; i <=20; i++)
{
Button ele = (Button) MainGrid.FindName("btn"+i);
}
此处MainGrid是具有按钮控件
的Grid元素的名称答案 1 :(得分:1)
您无法将字符串转换为按钮实例,但您需要使用 reflection btnN(fe btn1
)类字段值>:
Button button = (Button)GetType().GetField($"btn{i}", BindingFlags.Instance).GetValue(this);
甚至更有效的方法:使用字典查找按钮:
// Place this in your form constructor
Dictionary<string, Button> buttons = new Dictionary<string, Button>
{
{ "btn1", btn1 },
{ "btnN", btn2 }
};
// and later where you want to get your buttons by their name...
Button btn1 = buttons[$"btn{i}"];
答案 2 :(得分:0)
最后我找到了解决方案
for (int i = 1; i <= 20; i++)
{
var ele = GridMain.FindName("btn" + i);
// @Archana you missed this line
Button button = ele as Button;
// Do what you want to do with your control
button.Background = background;
button.Foreground = foreground;
}