2010-09-17 38 views
6

Quería agrupar varios botones de alternancia y hacer que se comportaran como botones de opción. Así que lo que hice fue agregar botones de radio para mi xaml y creó el siguiente estilo:Botón de alternar como botón de opción estilo

<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> 

Ahora los botones de radio se ven como botones de conmutación, y se aplican las propiedades de la fuente y el primer plano del estilo, pero si hago clic en uno de los botones de alternar, el fondo no cambia a rojo. Si cambio el primer plano basado en IsChecked, funciona, pero no puedo cambiar el fondo cuando IsChecked es verdadero.

¿Alguna idea?

ACTUALIZACIÓN:

Parece que el estilo por defecto ToggleButton no utiliza la propiedad de fondo. Estoy usando el siguiente código ahora para resolver mi problema. Si alguien ve algo mal con el siguiente, házmelo saber.

<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 establece explícitamente el 'Background' en' Red' en su 'RadioButton', ¿realmente funciona? –

+0

Sí. Configuración de fondo = "Rojo" en el botón de radio mismo muestra un botón de alternar con un fondo rojo. – Flack

Respuesta

4

¿Tiene el estilo que está basando en el uso de la propiedad Background en absoluto a menos que se establece "por el usuario"? Es decir, ¿puede usar el estilo para alternar el botón hasta este punto y establecer explícitamente el fondo en Rojo para obtener el efecto deseado?

El desencadenador en el estilo se ve bien, pero algunos estilos ignoran propiedades como el Fondo para la representación temática, por lo que establecer esas propiedades en un desencadenador no hace nada.

Otra posible causa es la noción de dependency property value precedence - cuando un valor se establece "localmente", el valor anula el indicado en el estilo (incluso si se establece a través de un disparador). Entonces, si su etiqueta <RadioButton> tiene un fondo configurado, el disparador no hará nada.

+0

Hola Philip. Investigué un poco más y parece que estás en lo correcto. El estilo en el que me baso no usa la propiedad Background. Actualicé mi pregunta con una solución que encontré. Gracias por la ayuda. – Flack

Cuestiones relacionadas