2011-04-06 90 views
4

我有多個按鈕,內容爲1,2,3,4,5 ......就像這樣。所有按鈕在上使用相同功能點擊事件。WPF如何知道在多個按鈕之間按下的當前按鈕

<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) 
     { 

     } 

謝謝。

回答

11

在函數中使用這個你就能得到上述內容屬性 -

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

@RV:謝謝。但它給我類型鑄造錯誤。我們需要使用(sender作爲Button).Content.ToString(); – KillerFish 2011-04-06 12:41:49

+0

是的,我忘了那部分..! Content屬性返回一個對象類型,因此您需要將其轉換爲字符串。 – 2011-04-06 12:45:39

+0

獲取空引用錯誤 – 2015-07-16 15:16:56

1

如果你把你的XAML Namex:Name屬性爲您的按鈕,那麼你可以使用原生的Object.Equals(),而不必投下或取消引用。這也可以保護您不必編輯您的代碼,並且可能會忘記在控制的Content更改時在兩個地方進行編輯。

鑑於

<Button Name="btnOne" ... /> 
<Button Name="btnTwo" ... /> 

然後

if (sender.Equals(btnOne)) {...} 
if (sender.Equals(btnTwo)) {...} 
+0

這假定xaml:x =「http://schemas.microsoft.com/winfx/2006/xaml」在XAML中,並且XAML控件和事件處理程序屬於同一個類。 – ergohack 2017-04-05 18:19:59

0

我傾向於一個物體連接到該按鈕的工具提示屬性來處理這個問題。然後,您可以拿回來這樣的:

 
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提示文本,使單擊處理程序訪問的標識。

相關問題