1

スタイルが適用された一連のトグルボタンがあります。ボタンがチェックされたときに背景色を変更できるようにしたい。各 ToggleButton は、次のコードを持つ同じ Checked イベントに割り当てられます。

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

コードはソース ToggleButton を正しく識別しますが、色は変更しません。

ToggleButtons に割り当てられたスタイルは次のとおりです。

<Style x:Key="GlassToggleButton" TargetType="{x:Type ToggleButton}">
    <Setter Property="FontSize" Value="24" />
    <Setter Property="Foreground" Value="White" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ToggleButton}">
                <Border x:Name="ToggleBorder" 
                    CornerRadius="0 15 0 15" 
                    Background="#AA000000"  
                    BorderBrush="#99FFFFFF"
                    RenderTransformOrigin="0.5,0.5">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="*"/>
                            <RowDefinition Height="1.7*"/>
                        </Grid.RowDefinitions>
                        <Border Grid.Row="0" CornerRadius="0,14,0,0">
                            <Border.Background>
                                <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
                                    <GradientStop Color="#02FFFFFF" Offset="0"/>
                                    <GradientStop Color="#55FFFFFF" Offset="0.5"/>
                                    <GradientStop Color="#11FFFFFF" Offset="1"/>
                                </LinearGradientBrush>
                            </Border.Background>
                        </Border>
                        <ContentPresenter x:Name="ToggleContentPresenter"
                            VerticalAlignment="Center"
                            HorizontalAlignment="Center"
                            Grid.RowSpan="2" />
                    </Grid>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter Property="RenderTransform" TargetName="ToggleBorder">
                            <Setter.Value>
                                <TransformGroup>
                                    <ScaleTransform ScaleX="0.95" ScaleY="0.95"/>
                                </TransformGroup>
                            </Setter.Value>
                        </Setter>
                        <Setter Property="Background" Value="#AAFF8020" />
                    </Trigger>
                    <Trigger Property="IsChecked" Value="True">
                        <Setter Property="Background" Value="#AAFF8020" />
                    </Trigger>
                    <Trigger Property="IsChecked" Value="False">
                        <Setter Property="Background" Value="#AA000000" />
                    </Trigger>
                    <Trigger Property="IsChecked" Value="{x:Null}">
                        <Setter Property="Background" Value="#AA000000" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
4

1 に答える 1

2

テンプレートで境界線の背景色を明示的に設定しているため、オーバーライドBackgroundするトリガーは機能しません(テンプレートはそれを無視します)。あなたがする必要があるのは、コントロール自身を尊重するようにあなたのスタイルをリファクタリングすることですBackground

に設定する代わりに、設定しBackground="#AA000000"ます-この種のバインディングは、内でのみ機能します。次に、に設定する別のセッターをスタイルに追加します。次に、トリガーに効果があることがわかります。BorderBackground="{TemplateBinding Background}"ControlTemplateBackground#AA000000

于 2012-04-22T07:18:20.050 に答える