Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF如何知道多个按钮中按下的当前按钮_Wpf_Button - Fatal编程技术网

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

WPF如何知道多个按钮中按下的当前按钮,wpf,button,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

我有多个按钮的内容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"/>

谢谢。

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

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

如果在按钮的XAML中放置
Name
x:Name
属性,则可以使用本机对象.Equals(),而无需强制转换或取消引用。这还可以防止您必须对代码进行双重编辑,并且在控件的
内容发生更改时可能忘记在这两个位置进行编辑

给定


我倾向于通过将一个对象附加到按钮的工具提示属性来处理这个问题。然后,您可以像这样将其取回:

void EditMe(object sender, RoutedEventArgs e) { Button x = sender as Button; if (x != null) { int id = (x.ToolTip as TT).Id; } } void EditMe(对象发送方,RoutedEventTargets e) { 按钮x=发送器为按钮; 如果(x!=null) { intid=(x.ToolTip作为TT.id); } } 本例中的TT对象如下所示:

public class TT { public int Id { get; set; } public string Text { get; set; } public override string ToString() { return Text; } } 公共类TT { 公共int Id{get;set;} 公共字符串文本{get;set;} 公共重写字符串ToString() { 返回文本; } } 它在UI上显示工具提示文本,并使Id可以在单击处理程序中访问。

使用属性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>

通过x:Name属性,您的.cs文件可以通过它选择XAML中的任何元素。

@RV:谢谢。但它给了我类型转换错误。我们需要使用(发件人作为按钮).Content.ToString();是的,我忘了那部分了。。!!Content属性返回一个对象类型,因此您需要将其类型转换为字符串。这假定
xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml“
,并且XAML控件和事件处理程序属于同一类。 void EditMe(object sender, RoutedEventArgs e) { Button x = sender as Button; if (x != null) { int id = (x.ToolTip as TT).Id; } } public class TT { public int Id { get; set; } public string Text { get; set; } public override string ToString() { return Text; } }
<Button x:Name="BtnA" Content="Some Btn A" Click="TestBtn_Click"></Button>
<Button x:Name="BtnB" Content="Some Btn B" Click="TestBtn_Click"></Button>
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.
}