WPF如何知道多个按钮之间按下的当前按钮

时间:2011-04-06 12:27:11

标签: wpf button

我有多个按钮,内容为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)
        {

        }

谢谢。

4 个答案:

答案 0 :(得分:14)

您可以在函数中使用此属性获取内容属性 -

string content = (sender as Button).Content.ToString();

答案 1 :(得分:3)

如果在XAML中为您的按钮添加Namex: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)

使用属性 x:Name 在大多数情况下都很好

最好在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中的任何元素。