2012-04-14 8 views
0

Ich habe eine Quiz-Anwendung, wo es bis zu 3 mögliche Antworten geben kann. Die Antworten sind Schaltflächen, denen ein Stil zugewiesen wurde. All Antwort Tasten haben das gleiche Click-Ereignis ...So bestimmen Sie, welchen Stil ein Steuerelement zugewiesen wurde

Private Sub butAnswer_Click(ByVal sender as Object, ByVal e as System.Windows.RoutedEventArgs) 
    'An Answer has been clicked 

    Dim butC as Button 
    Dim butS as String = TryCast(sender, Button).Name.ToString() 
    'Cycle through all answers and set style 
    For x = 1 to 3 
     butC = DirectCast(FindName("butAnswer" & x), Button) 
     If butS = "butAnswer" & x.ToString Then 
      butC.Style = DirectCast(FindResource("GlassButtonSelected"), Style) 
     Else 
      butC.Style = DirectCast(FindResource("GlassButton"), Style) 
     End If 
    Next 

End Sub 

ich jetzt auf diesen erweitern will, so dass, wenn der Benutzer ein zweites Mal auf einem ‚ausgewählt‘ klickt beantworten den Stil zurückgekehrt wird wieder auf ‚GlassButton‘

If butS = "butAnswer" & x.ToString Then 
'Check what style the button has 
    If 'style is GlassButton' Then 
     butC.Style = DirectCast(FindResource("GlassButtonSelected"), Style) 
    Else 
     butC.Style = DirectCast(FindResource("GlassButton"), Style) 
    End If 
Else 
    butC.Style = DirectCast(FindResource("GlassButton"), Style) 
End If 

Meine Frage ist, wie bestimmt ich, welchen Stil die Schaltfläche hat?

ZUSÄTZLICHE UPDATE

Kent, Danke, ich bin neu in WPF und wusste nicht, über all diese zusätzlichen Kontrollen ... ich jetzt habe meine Tasten zu ToggleButtons umgewandelt und haben einen einzigen geprüft und ungeprüft Ereignis, das von allen ToggleButtons verwendet wird. Ich habe meinen Stil so geändert, dass das Ziel ToggleButton ist, und ich habe jetzt nur noch den einen. Ich habe den Stil losgeworden, den ich verwenden wollte, um eine ausgewählte Antwort anzuzeigen - im Grunde eine Veränderung der Hintergrundfarbe. Mein überprüftes Ereignis hat ...

Private Sub togAnswer_Checked(ByVal sender as Object, ByVal e as System.Windows.RoutedEventArgs) 
    'togAnswer was clicked.... 
    Dim togC as ToggleButton 
    Dim togS as String = TryCast(sender, ToggleButton).Name.ToString() 
    'Cycle through all answers and set style 
    Dim bc = New BrushConverter() 

    For x = 1 to 3 
     togC = DirectCast(FindName("togAnswer" & x), ToggleButton) 

     If togS = "togAnswer" & x.ToString Then 
          'Set ToggleButton to selected colour 
      togC.Background = DirectCast(bc.ConvertFrom("#AAFF8020"), Brush) 
     Else  
      'Set other ToggleButtons to unselected colour 
      togC.Background = DirectCast(bc.ConvertFrom("#AA000000"), Brush) 
     End If 
    Next 
End Sub 

Leider ändert sich die Knopffarbe nicht. Irgendeine Idee warum?

Antwort

3

Kurz gesagt, Sie tun es falsch. Sie müssen das Verhalten (eine Schaltfläche in einem von zwei Status) identifizieren und es von der visuellen Manifestation dieses Verhaltens unterscheiden. Dies würde dazu führen, dass Sie ein ToggleButton verwenden und einfach sein Aussehen basierend auf seiner IsChecked Eigenschaft ändern.

+0

Kent, danke für den Zeiger in Richtung ToggleButton (s). Ich habe die vorgeschlagenen Änderungen gemacht, aber ich bin immer noch in einer kleinen Beize ... Die Hintergrundfarbe wird sich nicht ändern. Details in meiner Hauptfrage oben als Update. Irgendwelche Ideen? Jeder .... – Mych

+0

danke für den Zeiger in Richtung ToggleButton (s). Ich habe die vorgeschlagenen Änderungen gemacht, aber ich bin immer noch in einer kleinen Beize ... Die Hintergrundfarbe wird sich nicht ändern. Details in meiner Hauptfrage oben als Update. Irgendwelche Ideen? Anyone .... – Mych

+0

hat mich in die richtige Richtung von ToggleButton (s) hingewiesen. Meine Frage wird beantwortet, obwohl ich immer noch ein neues Problem bezüglich der Änderung des Hintergrunds habe. Ich habe dies als beantwortet markiert und eine separate Frage aufgeworfen – Mych

Verwandte Themen