2009-06-18 23 views
9

Vorrei creare un CheckBox che assomigli esattamente a un pulsante. Il mio tentativo debole iniziale non funziona affatto.WPF: Come creare una casella di controllo "pushlike"?

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

Il ContentPresenter non funziona (il pulsante è vuoto) e quando il pulsante viene premuto, la proprietà IsChecked non commuta. Inoltre, non so come rendere premuto il pulsante quando IsChecked è true.

risposta

13

Sarebbe un ToggleButton adatto alle vostre esigenze? CheckBox deriva da esso, e quindi sono molto simili.

+0

Sì, non avevo idea E era già una classe separata per un CheckBox che assomigliava ad un pulsante. – Qwertie

6

Ho appena iniziato a scrivere stesso commento :)

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

E ora come si voleva, il controllo Casella:

<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

Sono d'accordo che ToggleButton è la strada da percorrere, ma se vuoi che i tuoi contenuti vengano visualizzati nel tuo esempio, prova a cambiare la dichiarazione di ContentPresenter a questo:

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

Funziona se cambio la dichiarazione di ControlTemplate in Qwertie

Problemi correlati