2016-06-17 15 views
1

eigentlich habe ich zwei Probleme, die ich lösen und in meiner wpf-Anwendung zusammenbringen möchte.Event-Handler + Formatierung mehrerer Tasten - WPF

Ich habe mehrere Tasten, die ein bestimmtes Layout haben.

<Window.Resources> 
    <Style x:Key="greenButton" TargetType="Button"> 
     <Setter Property="Background" Value="LightGreen" /> 
     <Setter Property="FontSize" Value="20"/> 
     <Setter Property="BorderThickness" Value="1"/> 
    </Style> 
    ...   
</Window.Resources> 

ok, fein und hier sind meine Tasten:

<Button x:Name="btn100" Grid.Column="0" Grid.Row="2" Style="{StaticResource greenButton}">100</Button> 
<Button x:Name="btn101" Grid.Column="0" Grid.Row="3" Style="{StaticResource greenButton}">101</Button> 
<Button x:Name="btn102" Grid.Column="0" Grid.Row="4" Style="{StaticResource greenButton}">102</Button> 

Dann, nachdem ein Knopf-Click Ich möchte eine Methode auslösen, dass die Beschriftung der Schaltfläche muss

private void btn100_Click(object sender, RoutedEventArgs e) 
    { 
     name = (sender as Button).Content.ToString(); 
     doMethod(name); 
    } 

Ok. Aber ich habe so viele Buttons, also möchte ich dann mit dem selben Click - Event-Handler zusammen bringen. Ich versuchte dies:

<StackPanel Button.Click="button_Click" Grid.RowSpan="20"> 
    <Button Grid.Column="0" Grid.Row="0" FontWeight="Bold" BorderBrush="Black" Style="{StaticResource greenButton}">LT 1</Button> 
    <Button x:Name="btn100" Grid.Column="0" Grid.Row="2" Style="{StaticResource greenButton}">100</Button> 
    <Button x:Name="btn101" Grid.Column="0" Grid.Row="3" Style="{StaticResource greenButton}">101</Button> 
    <Button x:Name="btn102" Grid.Column="0" Grid.Row="4" Style="{StaticResource greenButton}">102</Button> 
</StackPanel> 

Mein C# -Code ist jetzt:

private void button_Click(object sender, RoutedEventArgs e) 
    { 
     name= (sender as Button).Content.ToString(); 
     doMethod(name); 
    } 

Und jetzt habe ich meine zwei Probleme:

  1. die Zeilenausrichtung funktioniert nicht für meine Knöpfe. Mit dem Stackpanel sind sie jetzt größer/höher als meine Zeilen, die ich in meinem Grid definiert habe
  2. Ich bekomme den Namen der Schaltfläche nicht. Es ist immer Null

Thx für Hilfe im Voraus.

Edit: Kein Duplikat In WPF can I attach the same click handler to multiple buttons at once like I can in Javascript/Jquery? Meine Lösung zu diesem Beitrag basiert, aber ich habe Probleme einen Schritt weiter zu gehen (Layout + Übertragungsvariablen)

+1

Mögliches Duplikat (http://stackoverflow.com/questions/4780132/ in-wpf-can-i-attach-der-same-click-handler-to-multiple-buttons-bei-einmal-wie-ich-ca) – ASh

+1

kein duplikat. Meine Lösung basiert auf diesem Post, aber ich habe Probleme, einen Schritt weiter zu gehen (Layout + Transfer-Variablen) – Knuspakeks

+1

Als eine Anmerkung ist es natürlich nicht notwendig, das StackPanel einzuführen (was offensichtlich Ihr Layout zerstört). Sie können auch 'Button.Click' im Grid zuweisen. – Clemens

Antwort

3

Wenn Sie die Button.Click Handler das Stackpanel zuweisen, den Absender Argument Die Handler-Methode ist keine Schaltfläche, daher gibt (sender as Button) null zurück.

können Sie (e.OriginalSource as Button) statt schreiben, indem sie es wahrscheinlich einfacher ist die Click-Handler durch einen EventSetter in Ihrem Stil auf alle Tasten zuweisen:

<Style x:Key="greenButton" TargetType="Button"> 
    ... 
    <EventSetter Event="Click" Handler="button_Click"/> 
</Style> 
+0

Ich entfernte das Stackpanel und implementierte Ihren Vorschlag und jetzt ... es funktioniert :) Thx viel – Knuspakeks

1

Ich denke, Absender ist in diesem Fall die Stackpanel. Versuchen Sie zu verwenden: [? In WPF kann ich den gleichen Click-Handler, um mehrere Tasten auf einmal anbringen, wie ich kann in Javascript/Jquery]

string name = (e.OriginalSource as Button)?.Content.ToString(); 
+0

yep, thx "e.Original Source" war der richtige Lösungsansatz – Knuspakeks