2009-06-18 12 views
9

Ich möchte eine CheckBox erstellen, die genau wie eine Schaltfläche aussieht. Mein anfänglicher schwacher Versuch funktioniert überhaupt nicht.WPF: Wie man eine "Pushlike" Checkbox macht?

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

Die Content funktioniert nicht (die Taste ist leer), und wenn die Schaltfläche geklickt wird, wird die IsChecked Eigenschaft nicht wechseln. Außerdem weiß ich nicht, wie man den Button gedrückt aussehen lässt, wenn IsChecked wahr ist.

Antwort

13

Würde ein ToggleButton Ihren Bedürfnissen entsprechen? CheckBox leitet sich davon ab und sie sind sich sehr ähnlich.

+0

Ja, ich hatte keine Ahnung, ther Für eine CheckBox, die wie eine Schaltfläche aussieht, war e bereits eine separate Klasse. – Qwertie

6

Ich habe gerade angefangen gleichen Kommentar zu schreiben :)

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

Und jetzt, wie man wollte, Steuer Checkbox:

<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

Ich bin damit einverstanden, dass ToggleButton ist der Weg zu gehen, aber wenn Sie möchten Ihre Inhalte in Ihrem Beispiel zu zeigen, versuchen Sie Ihre Content Erklärung zu dieser Veränderung:

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

Das funktioniert, wenn ich die ControlTemplate-Deklaration in ändere – Qwertie