2010-09-17 6 views
6

Je voulais regrouper un certain nombre de boutons à bascule et les faire se comporter comme des boutons radio. Donc ce que je faisais était d'ajouter des boutons radio à mon XAML et a créé le style suivant:Basculer le bouton comme style de bouton radio

<Style BasedOn="{StaticResource {x:Type ToggleButton}}" TargetType="RadioButton"> 
    <Setter Property="FontFamily" Value="Arial"/> 
    <Setter Property="FontSize" Value="12"/> 
    <Setter Property="Foreground" Value="White"/> 
    <Style.Triggers> 
    <Trigger Property="IsChecked" Value="True"> 
     <Setter Property="Background" Value="Red"/> 
    </Trigger> 
    </Style.Triggers> 
</Style> 

maintenant les boutons radio ressemblent à des boutons à bascule, et les propriétés de police et de premier plan du style sont appliqués, mais si je clique sur l'un des boutons à bascule, l'arrière-plan n'est pas changé en rouge. Si je change le premier plan basé sur IsChecked, cela fonctionne, mais je ne peux pas obtenir l'arrière-plan pour changer quand IsChecked est vrai.

Des idées?

MISE À JOUR:

Il semble que le style par défaut ToggleButton n'utilise pas la propriété d'arrière-plan. J'utilise maintenant le code ci-dessous pour résoudre mon problème. Si quelqu'un voit quelque chose de mal avec ce qui suit, s'il vous plaît faites le moi savoir.

<DataTemplate x:Key="RedBackground"> 
     <Grid Background="Red"> 
     <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" TextAlignment="Center" Text="{Binding}"/> 
     </Grid> 
    </DataTemplate> 

    <Style TargetType="ToggleButton"> 
     <Style.Triggers> 
     <Trigger Property="IsChecked" Value="True"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
      <Setter Property="VerticalContentAlignment" Value="Stretch"/> 
      <Setter Property="ContentTemplate" Value="{StaticResource RedBackground}"/> 
     </Trigger> 
     </Style.Triggers> 
    </Style> 
+0

Si vous définissez explicitement 'Background' sur' Red' sur votre 'RadioButton', cela fonctionne-t-il réellement? –

+0

Oui. Setting Background = "Red" sur le bouton radio lui-même affiche un bouton à bascule avec un fond rouge. – Flack

Répondre

4

Est-ce que le style vous basez sur l'utilisation de la propriété Background du tout sauf si elle est réglée « par l'utilisateur »? C'est-à-dire, pouvez-vous utiliser le style pour basculer le bouton jusqu'à ce point et définir explicitement l'arrière-plan en rouge pour obtenir l'effet désiré? Le déclencheur dans le style semble très bien, mais certains styles ignorent les propriétés telles que l'arrière-plan pour le rendu à thème, donc la définition de ces propriétés dans un déclencheur ne fait rien.

Une autre cause possible est la notion de dependency property value precedence - lorsqu'une valeur est définie "localement", la valeur remplace celle donnée dans le style (même si elle est définie via un déclencheur). Donc, si votre tag <RadioButton> a un arrière-plan défini, le déclencheur ne fera rien.

+0

Salut Philip. J'ai fait plus de recherches et il semble que vous ayez raison. Le style sur lequel je me base n'utilise pas la propriété Background. J'ai mis à jour ma question avec une solution que j'ai trouvée. Merci pour l'aide. – Flack