将字符串转换为控件名称c#wp8.1

时间:2016-03-31 07:53:48

标签: c# windows-phone-8 windows-runtime windows-phone-8.1 win-universal-app

在我的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手机应用程序不支持这些名称空间。

3 个答案:

答案 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;                
        }