2009-06-18 13 views
9

Me gustaría hacer un CheckBox que se vea exactamente como un botón. Mi intento débil inicial no funciona en absoluto.WPF: ¿Cómo hacer una casilla de verificación "pushlike"?

<CheckBox x:Name="test"> 
    Testing! 
    <CheckBox.Template> 
     <ControlTemplate> 
      <Button> 
       <ContentPresenter/> 
      </Button> 
     </ControlTemplate> 
    </CheckBox.Template> 
</CheckBox> 

El ContentPresenter no funciona (el botón está vacía) y cuando se hace clic en el botón, la propiedad IsChecked no de palanca correspondiente. Además, no sé cómo hacer que el botón se vea presionado cuando IsChecked es verdadero.

Respuesta

13

¿A ToggleButton se adaptan a sus necesidades? CheckBox se deriva de él, por lo que son muy similares.

+0

Sí, no tenía ni idea Ya era una clase separada para un CheckBox que se parece a un botón. – Qwertie

6

He empezado a escribir mismo comentario :)

<ToggleButton Name="tb" Height="45" Width="45"> 
     <ToggleButton.Style> 
      <Style TargetType="{x:Type ToggleButton}"> 
       <Setter Property="Content" Value="False"/> 
       <Style.Triggers> 
        <Trigger Property="IsChecked" Value="True"> 
         <Setter Property="Content" Value="True"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </ToggleButton.Style> 
    </ToggleButton> 

Y ahora como lo hubiera querido, el control de casilla de verificación:

<CheckBox> 
     <CheckBox.Template> 
      <ControlTemplate TargetType="CheckBox"> 
       <ToggleButton x:Name="toggleButton"> 
       </ToggleButton> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsChecked" Value="True" SourceName="toggleButton"> 
         <Setter Property="Content" Value="True"/> 
        </Trigger> 
        <Trigger Property="Content" Value="True"> 
         <Setter Property="IsChecked" Value="True"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </CheckBox.Template> 
    </CheckBox> 
2

Estoy de acuerdo que ToggleButton es el camino a seguir, pero si desea que su contenido se muestre en su ejemplo, intente cambiar su declaración de ContentPresenter a este:

<ContentPresenter Content="{TemplateBinding Content}" /> 
+0

Esto funciona si cambio la declaración ControlTemplate a Qwertie

Cuestiones relacionadas