0

私は最大3つの可能な答えがあることができるクイズアプリケーションを持っています。答えは、スタイルが割り当てられたボタンです。すべての回答ボタンには同じクリックイベントがあります...

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

これを拡張して、ユーザーが「選択された」回答を2回クリックすると、スタイルが「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

私の質問は、ボタンのスタイルをどのように判断するかです。

追加の更新

ケント、ありがとう、私はwpfを初めて使用し、これらすべての追加のコントロールについて知りませんでした...ボタンをToggleButtonsに変換し、すべてのToggleButtonsで使用される単一のチェック済みおよび未チェックのイベントがあります。ターゲットがToggleButtonになるようにスタイルを修正しましたが、これで1つだけになりました。選択した回答を示すために使用する予定だったスタイル(基本的には背景色の変更)を削除しました。私のチェック済みイベントには...

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

残念ながら、ボタンの色は変わりません。なぜですか?

4

1 に答える 1

3

要するに、あなたはそれを間違っているのです。動作(2つの状態のいずれかにあるボタン)を識別し、その動作の視覚的表現と区別する必要があります。そうすることで、を使用し、そのプロパティToggleButtonに基づいて外観を変更することになります。IsChecked

于 2012-04-14T08:44:10.493 に答える