我的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.....?
和其他问题是我已经制作了一个图像画笔。为每个创建的按钮背景分配图像的确切路径....但是没有附加图像......
请告诉我这两个问题......
答案 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 button
和access 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
}
希望这会有所帮助。