2010-06-11 71 views
0

我是一個C#初學者,我正試圖在WPF中實現一個數字鍵盤。它由10個類似的按鈕組成:如何處理WPF中多個類似按鈕上的點擊事件?

<Button Content="0" Name="button0" Click="anyButtonClicked" /> 
<Button Content="1" Name="button1" Click="anyButtonClicked" /> 
<Button Content="2" Name="button2" Click="anyButtonClicked" /> 
... 
<Button Content="9" Name="button9" Click="anyButtonClicked" /> 

處理所有這些按鈕的最佳做法是什麼?我是否在每個代碼的後面的代碼中構建一個函數(這將主要是無聊和重複自己),還是我構建一個函數來處理單擊的任何按鈕?

在第二種情況下,如何識別哪個按鈕被點擊?我需要訪問哪些發件人對象的屬性?

回答

3

如果你想使用後面的代碼,那麼你可以將它連接到單個事件處理程序,然後你可以將發件人投到Button(或FrameworkElement)並檢查它的Name property

在哥布林的回答下面展開;如果你想堅持的背後代碼和事件,你可以父面板上定義事件:

<StackPanel Button.Click="anyButtonClicked"> 
    <Button Content="0" Name="button0"/> 
    <Button Content="1" Name="button1"/> 
    <Button Content="2" Name="button2"/> 
    ... 
    <Button Content="9" Name="button9"/> 
</StackPanel> 

然後用e.OriginalSource,鑄按鈕或FrameworElement,檢索名稱。

private void anyButtonClicked(object sender, RoutedEventArgs e) 
{ 
    var source = e.OriginalSource as FrameworkElement; 

    if (source == null) 
     return; 

    MessageBox.Show(source.Name); 
} 

另外,您可以採取的辦法MVVM,有你所有的按鈕都綁定到一個單一的命令,並通過一個CommandParameter來區分它們。

+0

非常感謝!我也會看看指揮。 – 2010-06-11 08:47:50

1

您處理Button.Click事件在家長控制:

<StackPanel Button.Click="anyButtonClicked"> 
    <Button Content="0" Name="button0"/> 
    <Button Content="1" Name="button1"/> 
    <Button Content="2" Name="button2"/> 
    ... 
    <Button Content="9" Name="button9"/> 
</StackPanel> 

然後在你的事件處理程序 - 你可以檢查e.OriginalSource爲按下按鈕。

編輯:至於你的問題,如何處理它 - 你可以使用按鈕的Content-property來找出關鍵,然後用它來執行你的邏輯。

+0

謝謝。 嗯,使用內容屬性是一個好主意?我可以想象在多語言環境中內容會發生變化。 (儘管如此,我還沒有收到) – 2010-06-11 08:49:03

+1

呵呵 - 不,隨着你的應用程序的擴展 - 這可能不是一個好的選擇。當你走得更遠時,我同意韋爾和史蒂文采取命令的方式。 「首先讓它工作......」。 – Goblin 2010-06-11 08:52:25

1

你確實需要按照指令的方法,因爲你也可能需要按鍵。

相關問題