WPF:如何通过设置动态创建按钮的标记来调用方法

时间:2013-12-23 11:17:47

标签: c# wpf windows-phone-8

我的WPF(窗口电话)简单项目中有3个问题。我花了很多时间来解决它,但没有找到具体的结果..

在我的cs文件中,我创建了一堆动态按钮...我为每个动态按钮设置了for循环并设置了标签。

我的cs文件代码在这里。

  private void Grid_View_Btn_1_Click(object sender, System.Windows.RoutedEventArgs e)
    {



        //Grid ButtonsAddition
        Dispatcher.BeginInvoke(() =>
        {
            string[] Trade = new string[] { "Portfolio Display", "Trade Idea Entry", "Trade Idea Monitor", "Historical Performance", "Intraday Performance", "Stock Performance" };

            StackPanel panel = new StackPanel();
            panel.Orientation = System.Windows.Controls.Orientation.Vertical;

            //panel.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
            //panel.VerticalAlignment = System.Windows.VerticalAlignment.Top;

            int i;
            for (i = 0; i < Trade.Length; i++)
            {
                Button btn = new Button() { Content = Trade[i] };
                btn.Margin = new Thickness(0, -10, 0, -10);



                var brush = new ImageBrush();
                brush.ImageSource = new BitmapImage(new Uri("C:/Users/HafizArslan/Documents/Visual Studio 2012/Projects/AimPass/AimPass/Images/tabbar_btn_blue.png", UriKind.Relative));
                btn.Background = brush;


                btn.Width = 190;
                btn.Height = 75;
                btn.FontSize = 14;
                btn.FontWeight = light;
                btn.FontStretch = Fill;
                btn.HorizontalAlignment = HorizontalAlignment.Center;
                btn.VerticalAlignment = System.Windows.VerticalAlignment.Stretch;
                //   btn.CornerRadius = new CornerRadius(15);
                btn.BorderThickness = new Thickness(1, 1, 1, 1);
                btn.Tag = i.ToString();
                btn.Click += new RoutedEventHandler(abc_click);


                panel.Children.Add(btn);

            }
            grid.Children.Add(panel);

        });
    }
    private void abc_click(object sender, EventArgs e)
    {


    }

有6个按钮。 问题是我想用按钮执行不同的操作...我已经设置了标签,但我不知道如何使用按钮标签来访问操作??

我的意思是我想要这样的东西...... !!

     private void abc_click(object sender, EventArgs e)
    {

  // If(btn.Tag==1)
   {
   //Some Code Here
   }   
    else 
     if(btn.Tag==2) {
                    //Perform other Function
                    }
    }   Etc.....?

和其他问题是我已经制作了一个图像画笔。为每个创建的按钮背景分配图像的确切路径....但是没有附加图像......

请告诉我这两个问题......

4 个答案:

答案 0 :(得分:0)

在for循环中,您可以将处理程序与按钮关联。

如:

                Button btn = new Button() { Content = Trade[i] };
                btn.Margin = new Thickness(0, -10, 0, -10);
                if(<something>)
                   btn.Click += YourEventHandler1;

                if(<something2>)
                  btn.Click += YourEventHandler2;

如果要访问标记属性,则需要将发送者强制转换为Button,如下所示:

  private void abc_click(object sender, EventArgs e)
    {
       var btn = (Button)sender;
    }

答案 1 :(得分:0)

您有处理程序中的发件人,您可以type cast sender to buttonaccess Tag property

private void abc_click(object sender, EventArgs e)
{
   Button button = (Button)sender;
   if(Convert.ToInt32(button.Tag) == 1)
   {
      .....
   }
}

答案 2 :(得分:0)

如果对于所有创建的按钮事件都相同,那么一种方法可能是在这样的事件中获取标记

int tag=Convert.ToInt32((sender as Button).Tag);

现在使用开关

switch(tag)
{
case 1:
//Action
break;
case 2:
//Acrion
break;
//more cases
}

希望这会有所帮助。

答案 3 :(得分:0)

你应该选择这个

var tag=((sender as Button).Tag).ToString();
////now use a switch

Switch(tag)
{
case "1":
//Action
break;
case "2":
//Acrion
break;
//more cases
}

希望这会有所帮助。