我有多个按钮,内容为1,2,3,4,5 ......就像这样。所有按钮在单击事件中使用相同的功能。
<Button Content="1" Height="30" Name="button1" Width="30" Click="calculate"/>
<Button Content="2" Height="30" Name="button2" Width="30" Click="calculate"/>
<Button Content="3" Height="30" Name="button3" Width="30" Click="calculate"/>
<Button Content="4" Height="30" Name="button4" Width="30" Click="calculate"/>
<Button Content="5" Height="30" Name="button5" Width="30" Click="calculate"/>
我怎么知道在计算功能中按下了哪个按钮?我想从按下的按钮获取内容。
private void calculate(object sender, RoutedEventArgs e)
{
}
谢谢。
答案 0 :(得分:14)
您可以在函数中使用此属性获取内容属性 -
string content = (sender as Button).Content.ToString();
答案 1 :(得分:3)
如果在XAML中为您的按钮添加Name
或x:Name
属性,则可以使用本机object.Equals()而无需强制转换或取消引用。这也可以保护您不必双重编辑代码,并且可能在控件的Content
发生更改时忘记在两个位置进行编辑。
鉴于
<Button Name="btnOne" ... />
<Button Name="btnTwo" ... />
然后
if (sender.Equals(btnOne)) {...}
if (sender.Equals(btnTwo)) {...}
答案 2 :(得分:1)
我倾向于通过将对象附加到按钮的工具提示属性来处理此问题。然后你可以这样回来:
void EditMe(object sender, RoutedEventArgs e) { Button x = sender as Button; if (x != null) { int id = (x.ToolTip as TT).Id; } }
此示例中的TT对象如下所示:
public class TT { public int Id { get; set; } public string Text { get; set; } public override string ToString() { return Text; } }
在UI上显示工具提示文本,并在点击处理程序中访问Id。
答案 3 :(得分:1)
最好在XAML中使用x:Name属性。
例如,如果您在XAML中使用x:Name,那么它就非常适合您的源代码。
<Button x:Name="BtnA" Content="Some Btn A" Click="TestBtn_Click"></Button>
<Button x:Name="BtnB" Content="Some Btn B" Click="TestBtn_Click"></Button>
然后您可以通过BtnA和BtnB类型的.cs文件获取此对象。
private void TestBtn_Click(object sender, RoutedEventArgs e) {
if(sender.Equals(BtnA)) {
//User click BtnA to trigger TestBtn_Click()
} else if (sender.Equals(BtnB)) {
//User click BtnB to trigger TestBtn_Click()
} else {
//trigger TestBtn_Click() by another reason.
}
通过 x:Name 属性,您的.cs文件可以通过它选择XAML中的任何元素。