2009-06-18 5 views
9

Chciałbym zrobić CheckBox, który wygląda dokładnie tak, jak przycisk. Moja początkowa słaba próba nie działa wcale.WPF: Jak zrobić pole wyboru "pushlike"?

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

The ContentPresenter nie działa (przycisk jest pusty) i po kliknięciu przycisku, właściwość IsChecked nie włączyć. Ponadto nie wiem, jak sprawić, aby przycisk wyglądał na pchany, gdy IsChecked jest prawdą.

Odpowiedz

13

Czy ToggleButton spełni Twoje oczekiwania? CheckBox pochodzi z niego, a więc są bardzo podobne.

+0

Tak, nie miałem pojęcia e było już oddzielną klasą dla CheckBox, który wygląda jak przycisk. – Qwertie

6

Właśnie zacząłem pisać ten sam komentarz :)

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

a teraz jak chcesz, kontrolę 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

Zgadzam się, że ToggleButton jest droga, ale jeśli chcesz, aby Twoje treści pojawiały się w twoim przykładzie, spróbuj zmienić swoją deklarację ContentPresentera na:

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

Działa to, jeśli zmienię deklarację ControlTemplate na Qwertie